鑑於下面的C#類定義和代碼:調用從基類C#中的重寫方法
public class BaseClass
{
public virtual void MyMethod()
{
...do something...
}
}
public class A : BaseClass
{
public override void MyMethod()
{
...do something different...
}
}
public class B : BaseClass
{
public override void MyMethod()
{
...do something different...
}
}
public class AnotherObject
{
public AnotherObject(BaseClass someObject)
{
someObject.MyMethod(); //This calls the BaseClass method, unfortunately.
}
}
我想調用的MyMethod(),其實際上是在A或B中發現,假設對象傳入的實際上是A或B的實例,而不是在BaseClass中找到的實例。短缺做這樣的事情:
public class AnotherObject
{
public AnotherObject(BaseClass someObject)
{
A temp1 = someObject as A;
if (A != null)
{
A.MyMethod();
}
B temp2 = someObject as B;
if (B != null)
{
B.MyMethod();
}
}
}
我該怎麼辦?
這是一種代碼異味。 – Will
您傳遞給AnotherObject構造函數的ACTUAL對象的類型是什麼?換句話說,新的陳述是什麼?因爲你所描述的只能發生在你新建一個BaseClass而不是A或B的情況下。 – Nick
我認爲這是一個代碼異味的事實對於David來說是顯而易見的,否則這個問題就不會被公佈出來,而且臭的代碼會有被用來代替。 – Greg