记录C#泛型

常见的泛型类型

泛型类
class MyClass<T>
{
    //......
}

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

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

泛型数组
public T[] GenericArray;

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

泛型结构
struct MyGenericStruct<T>
{

}

泛型约束

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

 1、基类约束

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

注意:

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

2、接口约束

复制代码
/// <summary>
/// 接口约束
/// </summary> /// <typeparam name="T"></typeparam> /// <param name="t"></param> /// <returns></returns> public static T Get<T>(T t) where T : ISports { t.Pingpang(); return t; }
复制代码

 3、引用类型约束 class

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

复制代码
 1 /// <summary>
 2 /// 引用类型约束  3 /// </summary>  4 /// <typeparam name="T"></typeparam>  5 /// <param name="t"></param>  6 /// <returns></returns>  7 public static T Get<T>(T t) where T : class  8 {  9 return t; 10 }
复制代码

 4、值类型约束  struct

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

复制代码
 1 /// <summary>
 2 /// 值类型类型约束  3 /// </summary>  4 /// <typeparam name="T"></typeparam>  5 /// <param name="t"></param>  6 /// <returns></returns>  7 public static T Get<T>(T t) where T : struct  8 {  9 return t; 10 }
复制代码

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

复制代码
 1 /// <summary>
 2 /// new()约束  3 /// </summary>  4 /// <typeparam name="T"></typeparam>  5 /// <param name="t"></param>  6 /// <returns></returns>  7 public static T Get<T>(T t) where T : new()  8 {  9 return t; 10 }
复制代码

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

复制代码
1 public static void Show<T>(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

猜你喜欢

转载自www.cnblogs.com/chenbingquan/p/10801182.html