C # 'da, out
anahtar kelime iki farklı şekilde kullanılabilir.
Bir bağımsız değişkenin başvuru ile iletildiği bir parametre değiştirici olarak
class OutExample { static void Method(out int i) { i = 44; } static void Main() { int value; Method(out value); // value is now 44 } }
Kovaryans belirtmek için bir tür parametre değiştirici olarak .
// Covariant interface. interface ICovariant<out R> { } // Extending covariant interface. interface IExtCovariant<out R> : ICovariant<R> { } // Implementing covariant interface. class Sample<R> : ICovariant<R> { } class Program { static void Test() { ICovariant<Object> iobj = new Sample<Object>(); ICovariant<String> istr = new Sample<String>(); // You can assign istr to iobj because // the ICovariant interface is covariant. iobj = istr; } }
Sorum şu: neden?
Yeni başlayanlar için, ikisi arasındaki bağlantı sezgisel görünmüyor . Jeneriklerle kullanımın referans ile geçme ile bir ilgisi yok gibi görünüyor.
İlk out
olarak argümanları referansla geçme ile ilgili olanı öğrendim ve bu benim jeneriklerle kovaryans tanımlamanın kullanımını anlamamı engelledi.
Bu kullanımlar arasında eksik olduğum bir bağlantı var mı?
System.Func<in T, out TResult>
Temsilcideki kovaryans ve karşıtlık kullanımına bakarsanız bağlantı biraz daha anlaşılır olur .