当前位置:健康减肥瘦身 > 美容护肤 > CL牧马人 协变、逆变

CL牧马人 协变、逆变

文章作者:美容护肤 上传时间:2019-12-01

看样子泛型和嘱托、委托方法,开掘这此中的协变和逆变不平等。

健身减肥, 

 参考:

    public delegate object TestDelegate(string str);

    class MyClass
    {
        public string t1(string s)
        {
            return "";
        }

        public object t2(object s)
        {
            return "";
        }

        public string t3(object s)
        {
            return "";
        }

        public int t4(string s)//值类型不可以,只有引用类型支持协变和逆变
        {
            return 0;
        }
        public void main()
        {
            TestDelegate td1 = t1;
            TestDelegate td2 = t2;
            TestDelegate td3 = t3;
            TestDelegate td4 = t4;//编译报错,返回类型错误
        }
    }

泛型的逆变和协变:
假使某些重临类型可以由其基类替换,那么那个项目就是永葆协变的。
假使有些参数类型可以由其派生类替换,那么那么些类型便是支撑逆变的。

示范代码如下:

public class BaseClass
{
    //...
}

public class DerivedClass : BaseClass
{
    //...
}

IEnumerable<DerivedClass> d = new List<DerivedClass>();
IEnumerable<BaseClass> b = d;

//IEnumerable<T> 接口的定义(支持协变)
public interface IEnumerable<out T> : IEnumerable

 

看书看得有些晕了,协变、逆变傻傻分不清楚。

委托方法的逆变和协变:

 

 

 

假诺有些重返类型能够由其派生类替换,那么那些项目正是永葆协变的。
大器晚成经某些参数类型能够由其基类替换,那么那一个连串正是帮忙逆变的。

个体看书及查的质地所得,如有错误,迎接指正。

本身明天也可以有一点懵。

 

本文由健康减肥瘦身发布于美容护肤,转载请注明出处:CL牧马人 协变、逆变

关键词: