// 泛型约束意义 不会有类型安全问题 让开发者合理调配 // .NET支持的类型参数约束有以下五种: //where T : struct | T必须是一个结构类型 //where T : class | T必须是一个Class类型 引用类型 //where T : new() | T必须要有一个无参构造函数 //where T : NameOfBaseClass | T必须继承名为NameOfBaseClass的类 //where T : NameOfInterface | T必须实现名为NameOfInterface的接口 public class TModel { // 这表示GetSomethingList是个泛型方法,调用的时候需要确定T到底是什么类型,但这里类型T需满足 where T:class,new() 这个条件, //其中 where T:class,表示T必须是引用类型(而不是int等值类型,或者ValueType的其他子类),new() 表示这个类型T还必须至少具备一个无参的构造函数(还可以有其他有参数的构造函数)。 //如果对类型T只要求其中一个条件,可以写成 // 1) where T:class //表示T必须是引用类型 //2) where T:new() //表示这个类型T还必须至少具备一个无参的构造函数 public List<T> GetSomethingList<T>(int a) where T : class, new() { List<T> list = new List<T>(); return list; } /// <summary> /// 引用类型 约束 约束 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="a"></param> /// <returns></returns> public List<T> GetSomethingList2<T>(int a) where T : class { List<T> list = new List<T>(); return list; } /// <summary> /// 值类型约束 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="a"></param> /// <returns></returns> public List<T> GetSomethingList2ew<T>(int a) where T : struct { //2个大括号 是作用域 { } List<T> list = new List<T>(); return list; } /// <summary> /// where 就是约束 代表要调用此方法就得按这个方法的规矩 下面是约束无参构造函数 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="a"></param> /// <returns></returns> public List<T> GetSomethingList3<T>(int a) where T : new() { List<T> list = new List<T>(); return list; } public List<T> GetSomethingList4<T>(int a) where T : wwwww { List<T> list = new List<T>(); return list; } public List<T> GetSomethingList5<T>(int a) where T : niubi { List<T> list = new List<T>(); return list; } /// <summary> /// T是引用类型还必须是无参数构造 如何验证? /// </summary> /// <typeparam name="T"></typeparam> /// <typeparam name="TA"></typeparam> /// <returns></returns> public static string aaasdsadw<T, TA>() where T : class, new() where TA : class, new() { var s = new TA(); var p = typeof(T); var new_props = new List<System.Reflection.PropertyInfo>(); new_props.Add(p.GetProperties().FirstOrDefault()); return ""; } public List<T> GetSomethingList6<T, B, C>(int a) where T : class where B : struct where C : new() { List<T> list = new List<T>(); return list; } public class 实现上面的泛型 { public class list1 { public list1() { } } public class list2 { public list2(int b) { } } public void 开始实现() { TModel model = new TModel(); { var ss = model.GetSomethingList<list1>(1); } { var ss = model.GetSomethingList2<list2>(1); } { var ss = model.GetSomethingList2ew<int>(1); } { var ss = model.GetSomethingList3<long>(1); } { var ss = model.GetSomethingList4<wwwww>(1); } { var ss = model.GetSomethingList5<niubi>(1); } { //var ss = TModel.aaasdsadw<list1, list1>(); //var ssew = TModel.aaasdsadw<list1, list2>(); } { var ss = model.GetSomethingList6<list2,int, list1>(1); } } } }
标签:C#,List,基础,class,list,泛型,new,where,public From: https://www.cnblogs.com/flms/p/16966906.html