约束

对泛型实例调用方法的约束,当参数类型为X时及其派生类时,才能用A方法,否则只能用...方法;当参数类型为Y时,才能用B方法,否则....

有一个飞行技能 的类,那是不能让T为 鱼类 来调用飞行类里的方法,需要约束下该飞行类只能是鸟或恐龙里的翼龙或者什么其他的能飞的东西来调用方法。

约束的类型: 主约束 -----类名、class、struct   ;只能有一个

                       接口约束------接口名;可以多个

                       结构约束-------new()有默认构造函数;

关键字: where T 

 public void IsHappy<T>(T target) where T : Pet//添加了Pet类的约束,就可以在这个泛型方法中调用Pet的方法PrintName()
        {
            Console.WriteLine("Happy for "  );
            target.PrintName();//调用的这个PrintName属于Pet类
        }
 DD.IsHappy<Dog>(new Dog("KK"));//泛型方法IsHappy添加Pet约束后,输出是Pet类的PrintName()方法,而不是Dog类的PrintName()方法
 //DD.IsHappy<int>(3);//泛型方法IsHappy添加Pet约束后这句代码报错
原文地址:https://www.cnblogs.com/cicily/p/10937519.html