重要类的通用类型约束

Can*_*ncü 2 c# generics

是否可以为不共享基类/接口的多个类定义泛型约束?

对于前者

class A
{
}

class B
{
}

class C
{
    void Test<T>(T someObj)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我想将A类或B类传递给Test方法,没有别的.

我知道我可以使用A或B的基类/接口放置where语句,但是在我的情况下我不能为相关类指定基接口/类.

Pat*_*man 5

不,这样做没有意义.它不再是通用的.如果类AB共享属性,方法等,它们应该共享相同的接口或基类.如果没有,它们不是"相同的",不能这样对待.

猜猜如果你在两个类中的一个中更改了方法签名会发生什么.突然间,这种方法不再"共享"了.编译器不会尝试确定哪些方法和属性可以被视为共享,而是不支持您请求的功能.

一个选项是使用两个方法(每种类型的一个重载)引入​​重复代码,当然这很糟糕.最好使用一个interface,或者如果它真的不在你手中dynamic,尽管我尽量减少使用它.