我有以下類別:如何才能獲得新的關鍵字定義的方法在派生類中
class SearchEngine
{
public virtual void Search()
{
Console.WriteLine("Base Class");
}
}
class Google: SearchEngine
{
public override void Search()
{
Console.WriteLine("Google Class");
}
}
class Yahoo: SearchEngine
{
public new void Search()
{
Console.WriteLine("new method in Yahoo Class");
}
}
,我打電話給他們這樣說:
SearchEngine s1 = new SearchEngine();
SearchEngine s2 = new Google();
SearchEngine s3 = new Yahoo();
s1.Search();
s2.Search();
s3.Search();
我得到下面的結果:
Base Class
Google Class
Base Class
我的問題是如何從Yahoo
類訪問Search()
方法? (是的,我知道這是一個壞主意,用new
關鍵字這樣的,我知道這不是壓倒一切的類)
「是的,我知道這是不好的主意,使用這樣的新關鍵字,我知道這不是壓倒一個類」。比你爲什麼要做呢?除非你省略'new'或使用'Google s1 = new Google();'或'Yahoo s2 = new Yahoo();'或'只有在將您的實例轉換爲派生類時,'new'關鍵字才起作用。將它轉化爲基類導致調用基方法。 – HimBromBeere
答案是「在'Yahoo.Search()'上使用'override'而不是'new'。對」不,認真,我怎麼做錯了「的回答就是這樣的Lovecraftian噩夢:'public static空隙搜索(的搜索引擎ENG) { 如果(ENG是雅虎) (ENG雅虎).Search(); 否則 eng.Search();} '' –