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)'。請顯示一個簡短但完整的程序,它實際上證明了你所聲稱的內容。 –