我在 C# 中有以下情况:
class MyGenericClass<T>
{
public void do()
{
}
}
class SpecificFooImpl : MyGenericClass<Foo>
{
public void otherStuff()
{
}
}
现在我想编写一个只能返回 MyGenericClass<T>
或特定实现的通用方法。我会写这样的东西:var v1 = GetMyClass<MyGenericClass<Foo>>();
var v2 = GetMyClass<MyGenericClass<Bar>>();
var v3 = GetMyClass<SpecificFooImpl>();
我可以使用以下签名,但它对类型没有限制:public T GetMyClass<T>();
//I don't want to write
//var v4 = GetMyClass<AnyOtherTypesWhichNotExtendMyGenericClass>();
有没有优雅的模式来解决这个问题? 最佳答案
在定义后添加 where : 子句,就可以定义应该遵守的内容。
我说过它必须是一个类,但您可以添加一个基类或接口(interface)作为约束。
class MyGenericClass<T> where T : class, IYourCommonInterface
{
public void do()
{
}
}
引用 :
有关约束,请参阅 MSDN:http://msdn.microsoft.com/en-us/library/d5x73970.aspx
关于c# - 如何添加通用约束?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26992646/