• C#泛型约束


    1. where T : struct    对于结构约束,类型T必须是值类型

    2. where T : class     对于类约束,类型T必须是引用类型

    3. where T : 接口名称IFoo  对于指定接口IFoo约束,类型T必须实现指定接口IFoo

    4. where T : 类名Foo     对于指定类Foo约束,类型T必须是Foo对象或者是继承自Foo得对象

    5. where T : new()     构造函数约束,类型T必须有一个无参构造函数

    6. where T1:T2       裸类型约束,类型T1派生自泛型类型T2

    where T : struct 对于结构约束,类型T必须是值类型
    where T : class 对于类约束,类型T必须是引用类型
    where T : 接口名称IFoo 对于指定接口IFoo约束,类型T必须实现指定接口IFoo
    where T : 类名Foo 对于指定类Foo约束,类型T必须是Foo对象或者是继承自Foo得对象
    where T : new() 构造函数约束,类型T必须有一个无参构造函数
     where T1:T2  裸类型约束,类型T1派生自泛型类型T2

    1.

        static void Main(string[] args)
            {
                TestT(123);
                TestT('a');
                //TestT("123");  报错
                Console.ReadKey();
            }
            public static void TestT<T>(T t) where T : struct
            {
                Console.WriteLine(t.GetType());
            }    

    2.

      static void Main(string[] args)
            {
                TestT("123");
                //TestT(123);//报错
                Console.ReadKey();
            }
            public static void TestT<T>(T t) where T : class
            {
                Console.WriteLine(t.GetType());
            }

    3.

     class Program
        {
            static void Main(string[] args)
            {
                TestClass testClass = new TestClass();
                TestT(testClass);
                Object obj = new Object();
                //TestT(obj);//报错
                Console.ReadKey();
            }
            public static void TestT<T>(T t) where T : TestInterface
            {
                Console.WriteLine(t.GetType());
            }
        }
        interface TestInterface
        { }
    
        class TestClass : TestInterface
        {
        }

    4.

    class Program
        {
            static void Main(string[] args)
            {
                Father father = new Father();
                TestT(father);
                Childern childern = new Childern();
                TestT(childern);
                Object obj = new Object();
                //TestT(obj);//报错
                Console.ReadKey();
            }
            public static void TestT<T>(T t) where T : Father
            {
                Console.WriteLine(t.GetType());
            }
        }
    
        class Father
        {
        }
        class Childern:Father
        {
        }

    5.

    class Program
        {
            static void Main(string[] args)
            {
                TestClass testClass = new TestClass();
                TestT(testClass);
                TestClass2 testClass2 = new TestClass2(123);
                //TestT(testClass2);//报错
                Console.ReadKey();
            }
            public static void TestT<T>(T t) where T : new()
            {
                Console.WriteLine(t.GetType());
            }
        }
    
        class TestClass
        {
        }
        class TestClass2
        {
            public TestClass2(int num)
            {
            }
        }

    6.

    class Program
        {
            static void Main(string[] args)
            {
                TestClass testClass = new TestClass();
                TestClass2 testClass2 = new TestClass2();
                TestT(testClass2,testClass);
                Console.ReadKey();
            }
            public static void TestT<T1,T2>(T1 t,T2 t2) where T1 : T2
            {
                Console.WriteLine(t.GetType());
            }
        }
    
        class TestClass
        {
        }
        class TestClass2  : TestClass
        {
            public TestClass2()
            {
    
            }
        }
  • 相关阅读:
    MyEclipse里运行时报错
    Django中Template does not exit
    Django简单界面开发
    Django安装过程
    搭建NFS服务器和客户端过程中遇到的问题
    URL传值中文乱码的解决
    结合《需求征集系统》谈MVC框架
    对于微信小程序登录的理解图
    FpSpread基本句法
    sql,lambda,linq语句
  • 原文地址:https://www.cnblogs.com/xiaobao2017/p/12186213.html
Copyright © 2020-2023  润新知