您的位置:首页 > 编程学习 > ASP.NET > 正文

ASP.NET泛型约束

更多 时间:2016-11-18 类别:编程学习 浏览量:1166

ASP.NET泛型约束

ASP.NET泛型约束

一、指定泛型参数为值类型,即 T:结构

 

1、类型参数必须是值类型。可以指定除 Nullable 以外的任何值类型。

2、例如:

 

  • class MyList<T> where T:struct  
    {  
    ...代码省略部分  
    }  
    
    		
  • 3、 实例化类时: MyList<int> list = new MyList<int>(); 

     

    二、指定泛型参数为引用类型,即 T:类

     

    1、类型参数必须是引用类型,包括任何类、接口、委托或数组类型。

    2、例如:

     

  • class MyList<T> where T:class   
    {  
    ...代码省略部分   
    }   
    
    		
  • 3、 实例化类时: MyList<Birds> list = new MyList<Birds>(); 

     

    三、指定泛型参数有无参的公共的构造函数,即 T:new()

     

    1、类型参数必须具有无参数的公共构造函数。当与其他约束一起使用时,new() 约束必须最后指定。

    2、例如:

     

  • class MyList<T> where T:new()  
    {  
    ...代码省略部分  
    }  
    
    		
  • 3、实例化时:

    (1)、为Person类增加私有的无参构造函数:

     

  • class Person  
    {  
        public string Name { get; set; }  
        public Person() //必须包含 
    
    			 {  //do nothing  } } 
  • (2)、MyList<Person> list = new MyList<Person>();

     

    四、 指定泛型参数必须派生于指定基类,即 T:<基类名>

     

    1、类型参数必须是指定的基类或派生自指定的基类。

    2、实例:

    (1)、增加抽象类Animal

     

  • abstract class Animal
    {  
        public abstract void A();  
        public abstract void B();  
    }  
    
    		
  • (2)、使Birds类继承自Animal类

     

  • class Bird : Animal  
    {  
        public string Name { get; set; }  
      
        public override void A()  
        {  
            
        }  
      
        public override void B()  
        {  
            
        }  
    }  
    
    		
  • (3)、指定泛型参数必须派生于基类Animal

     

    3、实例化时:MyList<Person> list = new MyList<Person>(); 

     

    五、指定泛型参数必须实现指定接口,即 T:<接口名称>

     

    1、类型参数必须是指定的接口或实现指定的接口。可以指定多个接口约束。约束接口也可以是泛型的。

    2、和第四点类似。

     

    六、指定泛型参数必须派生于泛型类型U,即 T:U

     

    1、为 T 提供的类型参数必须是为 U 提供的参数或派生自为 U 提供的参数。这称为裸类型约束。

    2、例如:

  •  
  • class MyList<U> where U : SeniorAnimal  
    {  
        List<U> list = new List<U>();  
        public void ShowInfo<T>() where T : U  
        {  
        }  
    }  
    
    		
  •  

    标签:泛型约束