我有以下类别:如何才能获得新的关键字定义的方法在派生类中
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();} '' –