在C#中,out
可以两种不同的方式使用关键字。
-
class OutExample { static void Method(out int i) { i = 44; } static void Main() { int value; Method(out value); // value is now 44 } }
作为类型参数修饰符,以指定协方差。
// 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; } }
我的问题是:为什么?
对于初学者而言,两者之间的联系似乎并不直观。泛型的使用似乎与通过引用传递没有任何关系。
我首先了解了out
与通过引用传递参数有关的内容,这阻碍了我对使用泛型定义协方差的理解。
我所缺少的这些用途之间是否有联系?
System.Func<in T, out TResult>
委托中的协方差和逆方差用法,则该连接稍微容易理解。