我在 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/

10-11 00:00