【转】编写高质量代码改善C#程序的157个建议——建议42:使用泛型参数兼容泛型接口的不可变性
2021-04-24 15:29
                         标签:定义   main   ons   概念   高质量   转换   一个   兼容   color      建议42:使用泛型参数兼容泛型接口的不可变性 让返回值类型返回比声明的类型派生程度更大的类型,就是“协变”。如: Programmer是Employee的子类,所以Programmer对象也是Employee对象。方法GetAEmployee返回一个Programmer的对象,也就是相当于返回一个Employee对象。 由于协变是一种如此自然的应用,我们很可能写出如下代码: 在PrintSalary这个方法中,方法接收的类型是ISalary 无法从“MyTest.ISalary 编译器对于接口和委托类型参数的检查是非常严格的,除非用关键字out特别声明,不然这段代码只会编译失败。要让PrintSalary完成需求,我们可以使用泛型类型参数: 注意:建议开头指出“协变”是针对返回值而言的,但是所举的这个例子并没有体现“返回值”这个概念。实际上,只有泛型类型参数在一个接口声明中不被用来作为方法的输入参数,我们就姑且把它看成是“返回值”类型的。所以,本建议中这种模式是满足“协变”定义的。但是,只要将T作为输入参数,就不满足“协变”定义了。     转自:《编写高质量代码改善C#程序的157个建议》陆敏技 【转】编写高质量代码改善C#程序的157个建议——建议42:使用泛型参数兼容泛型接口的不可变性 标签:定义   main   ons   概念   高质量   转换   一个   兼容   color    原文地址:http://www.cnblogs.com/farmer-y/p/7943876.html        public Employee GetAEmployee(string name)
        {
            Console.WriteLine("我是雇员:"+name);
            return new Programmer() { Name = name };//Programmer是Employee的子类
        }
    class Program
    {
        static void Main(string[] args)
        {
            ISalaryProgrammer> s = new BaseSalaryCounter
        {
            s.Pay();
        }
    }
    interface ISalary        static void PrintSalary
文章标题:【转】编写高质量代码改善C#程序的157个建议——建议42:使用泛型参数兼容泛型接口的不可变性
文章链接:http://soscw.com/essay/79010.html