【发布时间】:2014-03-20 15:31:17
【问题描述】:
如果我有一个基类
class Foo : IClonable {
public object virtual Clone(){ return new Foo(); }
}
子类错误地使用new 而不是override 覆盖克隆。这是我正在尝试解决的第三方库中的错误的简化。
class Bar : Foo {
public new Clone() { return new Bar(); }
}
然后我有两种方法
public static T Bang(T source)
where T : Foo
{
return (T) source.Clone();
}
和
public static Bar Bang(Bar source)
{
return (Bar) source.Clone();
}
现在,如果我使用Bar 的实例调用第一个,我会得到Foo 的返回值。如果我调用第二个,我会返回 Bar。
我很好奇为什么通用版本没有得到Clone() 的new 版本,而是继承的版本。
是不是 T 类型在满足约束后被删除,然后它只是使用基类来表现?
【问题讨论】:
-
看看这个question也许能帮上忙。