Contents

泛型

泛型

  • 泛型实现了类型参数化达到代码重用目的
  • 通过类型参数化来实现一份代码上操作多种类型
  • 泛型相当于类型占位符
  • 定义类或方法时使用替代符代表变量类型
  • 当真正使用类或者方法时在具体指定类型

泛型分类

  • 泛型类 class 类名<泛型占位符>
  • 泛型接口 interface 接口名<泛型占位符>
  • 泛型函数 函数名<泛型占位符>(参数列表)
  • 泛型占位字母可以有多个 用逗号分开 一般是大写字母
  • 可以一定程度上避免装箱拆箱
  • 不确定泛型类型时 获取默认值 可以使用default(占位字符)
//泛型类
class TestClass<T,K>{
   public T value;
   public K  value2;
}
TestClass<int,string> t = new TestClass<int,string>();
t.value = 10;
t.value2 = "阿拉拉";

泛型接口

interface TestInterFace<T>{
    T Value{get;set;}
}
class Test : TestInterFace<int>{
    public int Value{
        get{ return 10;}
        set;
    }
}

泛型方法

普通类中的泛型方法

//普通类中的泛型方法
class Test{
    public void TestFun<T>(T value){
     	Console.WriteLine(value);   
    }
    
    public void TestFun<T>(){
        T t = default(T);   
    }
    
    public T TestFun<T>(string v){
        return default(T);
    }   
}
Test t = new Test();
t.TestFun<int>(10);//打印10

泛型类中的泛型方法

//普通类中的泛型方法
class Test<T>{
    //这个不叫泛型方法 因为 T是泛型类申明的时候 就指定 在使用这个函数的时候  我们不能再去动态的变化了
    public void TestFun<T>(T value){
     	Console.WriteLine(value);   
    } 
    //泛型方法
    public void TestFun2<K>(K value){
        Console.WriteLine(value);
    }
}

泛型约束

  • 泛型约束就是让泛型的类型有一定的限制
  • 关键字where
  • 基本语法:where 泛型字母:约束条件
  • 可以有多个约束
  • 泛型约束一共有六种
      1. 值类型:where T:struct
      2. 引用类型:where T:class
      3. 存在无参公共构造函数: where T:new()
      4. 某个类本身或者其派生类: where T:类名
      5. 某个接口的派生类型:where T:接口名
      6. 另一个泛型类型本身或者派生类型:where T:另一个泛型字母
//值类型约束
class Test<T> where T:struct{
	public void TestFun<K>() where K:struct{
	
	}
}

//多个约束
class Test<T> where T:struct{
	public void TestFun<K,V>() where K:class,new () where V:new()
    {
	
	}
}