记录C#泛型

2021-06-05 14:02

阅读:526

标签:子类   OLE   color   lin   必须   code   表示   logs   input   

常见的泛型类型

泛型类
class MyClass
{
    //......
}

泛型接口
interface  GenericInterface
{
    void  GenericMethod(T t);
}

泛型方法
public void MyGenericMethod()
{
     //......
}

泛型数组
public T[] GenericArray;

泛型委托
public delegate TOutput GenericDelagete(TInput input);

泛型结构
struct MyGenericStruct
{

}

泛型约束

  约束   说明
  T:结构   类型参数必须是值类型
  T:类   类型参数必须是引用类型;这一点也适用于任何类、接口、委托或数组类型。
  T:new()   类型参数必须具有无参数的公共构造函数。 当与其他约束一起使用时,new() 约束必须最后指定。
  T:   类型参数必须是指定的基类或派生自指定的基类。
  T:   类型参数必须是指定的接口或实现指定的接口。 可以指定多个接口约束。 约束接口也可以是泛型的。

 1、基类约束

 1 /// 
 2 /// 基类约束:约束T必须是People类型或者是People的子类
 3 /// 
 4 /// 
 5 /// 
 6 public static void Show(T tParameter) where T : People
 7 {
 8     Console.WriteLine($"{tParameter.Id}_{tParameter.Name}");
 9     Parameter.Hi();
10 }

注意:

基类约束时,基类不能是密封类,即不能是sealed类。sealed类表示该类不能被继承,在这里用作约束就无任何意义,因为sealed类没有子类。

2、接口约束

技术图片
/// /// 接口约束
/// /// /// 
/// public static T Get(T t) where T : ISports
{
    t.Pingpang();
    return t;
}
技术图片

 3、引用类型约束 class

引用类型约束保证T一定是引用类型的。

技术图片
 1 ///  2 /// 引用类型约束
 3 ///  4 ///  5 /// 
 6 ///  7 public static T Get(T t) where T : class
 8 {
 9     return t;
10 }
技术图片

 4、值类型约束  struct

值类型约束保证T一定是值类型的。

技术图片
 1 ///  2 /// 值类型类型约束
 3 ///  4 ///  5 /// 
 6 ///  7 public static T Get(T t) where T : struct
 8 {
 9     return t;
10 }
技术图片

 5、无参数构造函数约束  new()

技术图片
 1 ///  2 /// new()约束
 3 ///  4 ///  5 /// 
 6 ///  7 public static T Get(T t) where T : new()
 8 {
 9     return t;
10 }
技术图片

 泛型约束也可以同时约束多个,例如:

技术图片
1 public static void Show(T tParameter)
2             where T : People, ISports, IWork, new()
3 {
4     Console.WriteLine($"{tParameter.Id}_{tParameter.Name}");
5     tParameter.Hi();
6     tParameter.Pingpang();
7     tParameter.Work();
8 }
技术图片

 注意:有多个泛型约束时,new()约束一定是在最后。

转载:https://www.cnblogs.com/dotnet261010/p/9034594.html

转载:https://blog.csdn.net/kebi007/article/details/77800954

记录C#泛型

标签:子类   OLE   color   lin   必须   code   表示   logs   input   

原文地址:https://www.cnblogs.com/chenbingquan/p/10801182.html


评论


亲,登录后才可以留言!