我正在研究工作中的小型类库,它自然会涉及使用泛型来完成这项任务.但是有些东西我对仿制药并不是很了解:
为什么我需要使用泛型类型参数,然后将type参数约束到特定的基类或接口.
为什么我需要使用泛型类型参数,然后将type参数约束到特定的基类或接口.
这是我的意思的一个例子:
public class MyGenericClass<T> where T : SomeBaseClass { private T data; }
这是没有泛型的实现
public class MyClass { private SomeBaseClass data; }
这两个定义是否相同(如果是,那么我在这里看不到使用泛型的优点)?
如果没有,我们在这里使用泛型有什么好处?
解决方法
与仿制药的几乎所有用途一样,消费者也会受益.约束类型可以获得与强类型参数相同的优势(或者您可以执行其他操作,例如确保存在无参数构造函数或确保它是值或引用类型),同时仍保留泛型的细节您的班级或职能的消费者.
例如,使用泛型也允许您获取指定的实际类型(如果具有任何特定值).
这个例子有点人为,但看看这个:
public class BaseClass { public void FunctionYouNeed(); } public class Derived : BaseClass { public void OtherFunction(); } public class MyGenericClass<T> where T: BaseClass { public MyGenericClass(T wrappedValue) { WrappedValue = wrappedValue; } public T WrappedValue { get; set; } public void Foo() { WrappedValue.FunctionYouNeed(); } } ... var MyGenericClass bar = new MyGenericClass<Derived>(new Derived()); bar.Foo(); bar.WrappedValue.OtherFunction();