In C # kann das out
Schlüsselwort auf zwei verschiedene Arten verwendet werden.
Als Parametermodifikator, in dem ein Argument als Referenz übergeben wird
class OutExample { static void Method(out int i) { i = 44; } static void Main() { int value; Method(out value); // value is now 44 } }
Als Typparameter-Modifikator zur Angabe der Kovarianz .
// 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; } }
Meine Frage ist: warum?
Für einen Anfänger scheint die Verbindung zwischen beiden nicht intuitiv zu sein . Die Verwendung mit Generika scheint nichts mit der Übergabe von Referenzen zu tun zu haben.
Ich habe zuerst gelernt, was out
mit der Weitergabe von Argumenten durch Bezugnahme zu tun hat, und dies hat mein Verständnis der Verwendung der Definition von Kovarianz mit Generika behindert.
Gibt es einen Zusammenhang zwischen diesen Verwendungen, den ich vermisse?
System.Func<in T, out TResult>
Delegaten ansehen .