В прошлом шаге я говорил о том, что разницу ref и out легко почувствовать на перечислениях. Смотрим код:
using System; class MainClass { public enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri}; public static void Functs(ref Days day) { day=Days.Sat; } public static void Main(string[] args) { Days day; Functs(ref day); Console.WriteLine(day); } }
При компиляции получим ошибку так как Days day; объявляет переменную но ее не инициализирует.
А вот использование out позволяет это сделать.
using System; class MainClass { public enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri}; public static void Functs(out Days day) { day=Days.Sat; } public static void Main(string[] args) { Days day; Functs(out day); Console.WriteLine(day); } }
Все нормально, out допускает использование неинициализированный параметров.