0
参数类型重载我有这样的事情:与有基础和继承的类
class BaseArg { }
class DerivedArg : BaseArg { }
interface IDoSomething
{
void DoSomething();
}
class A : IDoSomething
{
public BaseArg Value { get; set; }
public A(BaseArg value)
{
this.Value = value;
}
public static A Create(BaseArg arg)
{
return new A(arg);
}
public static B Create(DerivedArg arg)
{
return new B(arg);
}
public virtual void DoSomething()
{
}
}
class B : A
{
public DerivedArg DerivedValue { get; set; }
public B(DerivedArg value)
: base(value)
{
this.DerivedValue = value;
}
public override void DoSomething()
{
// does something different from A.DoSomething()
// uses additional stuff in DerivedArg
}
}
然而,即使我这样做:
DerivedArg arg = new DerivedArg();
A a = A.Create(arg);
A.Create(BaseArg arg)
被称为(因此A
创建,这不是意图)。
我在这里错过了什么吗?如果是这样,我应该怎么重写这个,而不使用奇怪的东西,如arg as DerivedArg
条件。
无法重现。通过你给出的代码(固定使'A.DoSomething'虚拟),你在底部给出的代码*调用'A.Create(DerivedArg)'。请显示一个简短但完整的程序,它实际上证明了你所声称的内容。 –