C# 方法隐藏和;新";关键词
在我的一生中,我从未理解过“方法隐藏”,尽管有关于它的所有文档 重写意味着在派生类中使用实现。我认为隐藏(通过使用“new”关键字)意味着使用基类定义是对的吗?在这种情况下,为什么要在继承的类中编写方法 实际上,我的两个问题是:C# 方法隐藏和;新";关键词,c#,C#,在我的一生中,我从未理解过“方法隐藏”,尽管有关于它的所有文档 重写意味着在派生类中使用实现。我认为隐藏(通过使用“new”关键字)意味着使用基类定义是对的吗?在这种情况下,为什么要在继承的类中编写方法 实际上,我的两个问题是: 隐藏是否与覆盖相反 新关键字(用于隐藏)做什么?何时/何地使用?基类?继承类 有什么有用的现实例子吗 你的理解有点错误 首先,重写方法意味着即使将实例强制转换为其基类型,也将使用新的实现,因为虚拟方法表中有一个正确的条目 隐藏方法时,当实例被强制转换为其基类型时,将使用
你的理解有点错误 首先,重写方法意味着即使将实例强制转换为其基类型,也将使用新的实现,因为虚拟方法表中有一个正确的条目 隐藏方法时,当实例被强制转换为其基类型时,将使用基实现,因为虚拟方法表中没有条目 给定以下类定义:
public class Base
{
public virtual void Say()
{
Console.WriteLine("Hello World!");
}
}
public class A : Base
{
public new void Say()
{
Console.WriteLine("42");
}
}
public class B : Base
{
public override void Say()
{
Console.WriteLine("Goodbye, Cruel World!");
}
}
以下代码将产生:
var a = new A();
var b = new B();
var aAsBase = a as Base;
var bAsBase = b as Base;
a.Say(); // 42
aAsBase.Say(); // Hello World!
b.Say(); // Goodbye, Cruel World!
bAsBase.Say(); // Goodbye, CruelWorld!
第二个代码段第4行的输入错误:
var bAsBase=b as Base;//不是a
,但为什么要使用“new”关键字呢?在我的实验中,无论是否使用它,它的功能都是相同的。唯一的区别是编译器警告。