Dalam C #, out
kata kunci dapat digunakan dalam dua cara berbeda.
Sebagai pengubah parameter di mana argumen dilewatkan oleh referensi
class OutExample { static void Method(out int i) { i = 44; } static void Main() { int value; Method(out value); // value is now 44 } }
Sebagai pengubah parameter tipe untuk menentukan kovarians .
// 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; } }
Pertanyaan saya adalah: mengapa?
Bagi seorang pemula, hubungan antara keduanya tampaknya tidak intuitif . Penggunaan dengan obat generik tampaknya tidak ada hubungannya dengan melewati referensi.
Saya pertama kali belajar apa out
yang terkait dengan melewati argumen dengan referensi, dan ini menghambat pemahaman saya tentang penggunaan mendefinisikan kovarians dengan obat generik.
Apakah ada koneksi antara penggunaan ini yang saya lewatkan?
System.Func<in T, out TResult>
delegasi .