C#泛型基础
// 泛型约束意义 不会有类型安全问题 让开发者合理调配
// .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);
}
}
}
}
云在青天水在瓶

浙公网安备 33010602011771号