class Base<T1, T2>
{
protected Base(T1 type1, T2 type2)
{
}
}
public class Derived<T> : Base<T, int>
{
public Derived(T type1, int i)
: base(type1, i)
{
}
}
public class Derived<T> : Base<T, double>
{
public Derived(T type1, double d)
:base(type1, d)
{
}
}
上面的代码无法编译,因为Visual Studio将第二个派生类型的构造函数的基本调用标记为'MyBase.MyBase(T,int)',我希望这实际上是调用'MyBase.MyBase(T,double) ”。
删除或重命名(即DerivedInt)第一个派生类型允许第二个派生类型正确编译。
我的问题是,为什么会发生这种情况? 我真的不确定导致这种行为的原因是什么?一阶导数类型如何与第二类导致冲突? 除了前面提到的重命名之外,还有一种解决方法吗?或者也许是解决这个问题的更好方法。
干杯
答案 0 :(得分:1)
在同一名称空间中有两种名为Derived<T>
的类型。这是不允许的。
他们有不同的基类这一事实并不意味着他们有不同的名称。
如果你要写typeof(Derived<string>)
你会选哪一个?
答案 1 :(得分:0)
嗯,你不能在同一名称空间下有两个同名的类型(即Derived<T>
)。这就是重命名其中一个使其有效的原因。