如果不需要把类型参数所表示的对象设为实例字段,那么应该优先考虑创建泛型方法,而不是泛型类
在两种情况下,必须把类写成泛型类:
第一种情况,该类需要将某个值用作其内部状态【属性的返回值、字段的返回值等】,而该值的类型必须以泛型来表达(例如集合类);
第二种情况,该类需要实现泛型版的接口。除此之外的情况,都应该考虑使用包含泛型方法的非泛型类来实现。
public interface IGeneric<T>
{T Method(T input);
}
public class Generic<T> : IGeneric<T>
{public T Method(T input){// 这里可以是对T类型数据的任何操作,例如返回相同的值 return input;}
}
泛型类
定义一个简单的泛型栈类:在这个例子中,Untils是一个泛型类,T是类型参数。
使用这个类时,可以根据需要传入具体的类型,如Untils、Untils等。
》》》
泛型方法
泛型方法的定义与其所在的类是否是泛型类是没有任何关系的,所在的类可以是泛型类,也可以不是泛型类
泛型方法是在方法级别上应用泛型的概念,即在方法签名中使用类型参数,使其能够处理多种数据类型,而无需所在的类或结构是泛型的。换句话说:泛型方法既可以存在泛型类中,也可以存在普通类中.
泛型方法 可以根据录入的参数 编译器推理 泛型类型
Utils.Max(0,10) ======》 简化 Utils.Max(0,10)
泛型类是在类级别定义的,而泛型方法是在方法级别定义的。
泛型类:
当一个类要操作多种不同的数据类型时,可以使用泛型类。
泛型类的类型参数在整个类中有效。
泛型方法:
当一个方法要操作多种不同的数据类型时,可以使用泛型方法。
泛型方法的类型参数只在该方法中有效。
// 泛型类的示例
public class Box<T>
{private T item;public void SetItem(T item){this.item = item;}public T GetItem(){return this.item;}
}// 泛型方法的示例
public class Utility
{public static void Swap<T>(ref T a, ref T b){T temp = a;a = b;b = temp;}
}
泛型委托
泛型接口