In C #, la out
parola chiave può essere utilizzata in due modi diversi.
Come modificatore di parametri in cui un argomento viene passato per riferimento
class OutExample { static void Method(out int i) { i = 44; } static void Main() { int value; Method(out value); // value is now 44 } }
Come modificatore di parametri di tipo per specificare la covarianza .
// 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; } }
La mia domanda è: perché?
Per un principiante, la connessione tra i due non sembra intuitiva . L'uso con i generici non sembra avere nulla a che fare con il passaggio per riferimento.
Ho prima appreso cosa out
c'era in relazione al passare degli argomenti per riferimento, e questo ha ostacolato la mia comprensione dell'uso della definizione della covarianza con i generici.
C'è una connessione tra questi usi che mi manca?
System.Func<in T, out TResult>
delegato .