W języku C # out
słowa kluczowego można używać na dwa różne sposoby.
Jako modyfikator parametru, w którym argument jest przekazywany przez odwołanie
class OutExample { static void Method(out int i) { i = 44; } static void Main() { int value; Method(out value); // value is now 44 } }
Jako modyfikator parametru typu do określania kowariancji .
// 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; } }
Moje pytanie brzmi: dlaczego?
Dla początkującego połączenie między nimi nie wydaje się intuicyjne . Wydaje się, że użycie z rodzajami nie ma nic wspólnego z przekazywaniem przez referencję.
Najpierw nauczyłem się, co out
jest związane z przekazywaniem argumentów przez odniesienie, i to utrudniło mi zrozumienie użycia definicji kowariancji z rodzajami.
Czy istnieje związek między tymi zastosowaniami, których mi brakuje?
System.Func<in T, out TResult>
delegacie .