星期一, 9月 22, 2008

繼承的base class的問題..

今天被問到一個問題..就是..

c繼承b,b繼承a, b覆寫a的某一個method,那c要用a的method,那轉型到a在使用a的method,這樣可以嗎??..

我直接寫code來表達這樣比較容易看..

class a
{
public virtual string aMethod()
{
return "it's a";
}
}
class b : a
{
public override string aMethod()
{
return "it's b";
}
}
class c : b
{
//..
}

我直接試了一下..

c c1 = new c();
Response.Write(c1.aMethod() + "<br />");
Response.Write(((a)c1).aMethod());

測試答案是這樣做"不行"..Surprise..以前沒遇過也沒想過這問題..又讓我學到東西了..
其實如果真的要這樣搞..可以在b裡動手腳(我沒想到請各位大大賜教)..不過..我的直覺反應是..這樣是個好繼承ㄇ..繼承帶來了許多負擔..在繼承時就要想到適不適合..而不要在繼承後才在想怎樣解決..俗話說得好..預防勝於治療..10次車禍九次快..騎車要帶安全帽..ClownClownClownClownClown..

2 則留言:

Allen Kuo 提到...

我沒親自試 ,但將c想呼叫的method,先額外寫一支放在a裡, 再在c裡呼叫它,可以嗎

JEAN 提到...

把 virtual 拿掉就行