C#中的泛型能够将类型作为参数传递,创建类型是用符号T作为占位符代替实际类型,实例化时,用实际类型替换。
定义泛型类:
- public class Farm<T> :IEnumerator<T> where T :Animal//泛型类使用where关键字进行约束
- { //struct值类型 class引用类型 interface接口类型 new()公共无参构造函数
- private List<T> animals=new List<T>();
- public void Add(T animal) => animals.Add(animal);//浪漫哒表达式
- }
- //泛型类中实现泛型方法 where关键字进行约束 泛型方法标识符U和类的标识符T最好不同的表示
- public Farm<U> GetSpecies<U>() where U:T {
- Farm<U> speciesFarm = new Farm<U>();
- foreach (T item in animals)
- {
- if (item is U)
- {
- speciesFarm.Animals.Add(item as U);
- }
- }
- return speciesFarm;
- }
- //泛型方法
- public T GetT<T1>() => default(T);
- }
- //非泛型类实现泛型方法
- public class Defaulters {
- public T GetDefaulter<T>() => default(T);
- }
- //泛型类实现泛型方法 类的泛型标识符不能和方法泛型标识符相同
- public class Defaulterss<T1> {
- public T2 GetDefaulterss<T2>() where T2:T1=> default(T2);
- }
- //泛型结构体
- public struct MyStruct<T1, T2> {
- public T1 item1;
- public T2 item2;
- }
- //泛型接口
- public interface MyInterface<T> where T : Animal {
- bool Breed(T animal1,T animal2);
- T Old { get; }//泛型属性
- }
- //泛型委托
- public delegate T DelegateGeneric<T>(T item);