全部 -
已阅读有关新关键字的各种文章及何时使用:
MSDN - http://msdn.microsoft.com/en-us/library/6fawty39(v=vs.80).aspx
StackOverflow - benefit of using new keyword in derived class member having same name with base class member
以下是我为实践此概念而编写的示例代码
static void Main(string[] args)
{
Animal a2 = new Dog();
a2.Talk();
a2.Sing();
a2.Greet();
a2.Dance();
Console.ReadLine();
}
class Animal
{
public Animal()
{
Console.WriteLine("Animal constructor");
}
public void Talk()
{
Console.WriteLine("Animal is Talking");
}
public virtual void Sing()
{
Console.WriteLine("Animal is Singing");
}
public void Greet()
{
Console.WriteLine("Animal is Greeting");
}
public virtual void Dance()
{
Console.WriteLine("Animal is Dancing");
}
}
//Derived Class Dog from Animal
class Dog : Animal
{
public Dog()
{
Console.WriteLine("Dog Constructor");
}
public new void Talk()
{
Console.WriteLine("Dog is Talking");
}
public override void Sing()
{
//base.Sing();
Console.WriteLine("Dog is Singing");
}
public new void Dance()
{
Console.WriteLine("Dog is Dancing");
}
}
我的输出结果如下:
让我感到困惑的是,通过在derieved类中使用new关键字实际上显示了基类的输出。不是错误的 - 不是新的关键字应该隐藏基类成员,所以动物是说话和动物跳舞的结果不应该打印。
由于
答案 0 :(得分:7)
“new”表示方法是“new”而不是“override”。因此,如果从基数调用该名称的方法,则它尚未被覆盖,因此不会调用派生。
答案 1 :(得分:0)
这对我来说也很困惑,但简单地说:
new关键字隐藏了父级的子级成员。