En C #, le out
mot - clé peut être utilisé de deux manières différentes.
Comme modificateur de paramètre dans lequel un argument est passé par référence
class OutExample { static void Method(out int i) { i = 44; } static void Main() { int value; Method(out value); // value is now 44 } }
En tant que modificateur de paramètre de type pour spécifier la covariance .
// 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; } }
Ma question est: pourquoi?
Pour un débutant, la connexion entre les deux ne semble pas intuitive . L'utilisation avec des génériques ne semble avoir rien à voir avec le passage par référence.
J'ai d'abord appris ce qui out
était lié au passage d'arguments par référence, ce qui a nui à ma compréhension de l'utilisation de la définition de la covariance avec les génériques.
Existe-t-il un lien entre ces utilisations qui me manque?
System.Func<in T, out TResult>
délégué .