C# 逆变、协变

来源:互联网 发布:网络口碑维护 编辑:程序博客网 时间:2024/04/30 03:35

最近看的一些框架,很多封装的泛型委托/接口中,都有写in和out,

了解了这块,逆变和协变。

自定义委托:

    //协变:out对于泛型参数类型 标识:该类型是协变的    public delegate TResult FuncOut<out TResult>();    //逆变:in对于泛型参数类型 标识:该类型参数是逆变的    public delegate TResult FuncIn<in TResult>();
测试:

    //协变:正常 变化  子类到父类的转换     string->object    //逆变:非正常变化 父类到子类的转换     object->string    FuncOut<string> rf = () => { return "协变"; };    FuncOut<object> rfObj = rf;    FuncIn<object> func = () => { return "逆变"; };    FuncIn<string> sfunc = func;    //其实逆变最后还是进行了强制转换而已




0 0
原创粉丝点击