c# 泛型之约束

1.1类类型约束

  有时候可能要求能将类型实参转换为特定的类类型,这是用类类型约束做到的。

 

 public class TestDictionary<TKey, TValue> : Dictionary<TKey, TValue> where TValue : EntityBase
 { }

如上述代码,TestDictionary<TKey, TValue> 要求类型参数TValue提供的所有类型参数都必须隐式的转换为EntityBase类。

与接口约束不同,不允许多个类类型约束。c#不允许将类型参数约束为string或者System.Nullable<T>,否则就只有单一类型实参可供选择,类型参数就没必要存在了,直接用这个类型即可  

 

 1.2接口约束

 IComparable是一个接口,可以排序或排序的类型实现

 public    class Program
 {
     public class Container<T, U>
     {
         /// <summary>
         /// 嵌套类
         /// </summary>
         /// <typeparam name="U"></typeparam>
         public class Nested<U>
         {
             public void Method(T t, U u)
             {
             }
         }

     }
       public  static void Main(string[] args)
        {
//这时候会报错 不能将类型“System.Text.StringBuilder”用作泛型类型或方法“ConsoleApplication2.BinaryTree<T>”中的类型形参“T”。没有从“System.Text.StringBuilder”到“System.IComparable<System.Text.StringBuilder>”的隐式引用转换。
 
            BinaryTree<StringBuilder> b = new BinaryTree<StringBuilder>();
//下面的就可以
            BinaryTree<int> b = new BinaryTree<int>();
BinaryTree<string> b = new BinaryTree<string>();
 } } 
//这是为了这个类中的方法实现而加的对参数的约束。
public class BinaryTree<T> where T : IComparable<T> {

}

1.3struct/class约束

c# 泛型之约束

上一篇:.NET CORE(C#) WPF简单菜单MVVM绑定


下一篇:Centos7安装Nacos单机模式以及集群模式(包含nignx安装以及实现集群)的相关配置