我跑到了以下地方:
public void AddConfig<T>(Config c) where T : BaseTypeA
{
// do stuff
}
public void AddConfig<T>(Config c) where T : BaseTypeB
{
// do stuff
}
我希望能够做到这一点。但我认为这是不可能的。 编译器忽略约束。为什么? (我知道这是设计)。
我认为我的两个选择是:
右?
答案 0 :(得分:4)
如果你的意思是在同一个类中,那么你是正确的(我不认为编译器检查以确保BaseTypeA和BaseTypeB不能相互转换,这是你需要检查以确保它们是唯一的方法,例如where T : BaseTypeA && T !: BaseTypeB
,如果你理解我的意思。)
尽管如此,你为什么不这样做:
interface IConfigurable
{
void AddConfig(Config c)
}
public class BaseTypeA : IConfigurable
public class BaseTypeB : IConfigurable
答案 1 :(得分:4)
约束不是签名的一部分。这是设计的。
如果您有兴趣阅读那些认为约束应该成为签名一部分的人的一百多条评论,请查看我的巧妙标题博客条目的评论Constraints Are Not Part Of The Signature.