我已经阅读了许多关于“方法隐藏,新关键字,覆盖及其差异”的堆栈溢出问题和答案,但我仍然对为什么使用NEW关键字感到困惑?
这是我的疑问,
(1)。的
class Base
{
// base property
public virtual string Name
{
get { return "Base"; }
}
}
class New : Base
{
// new property, hides the base property
public new string Name
{
get { return "New"; }
}
}
New n = new New();
// type of `n` variable is `New`, and `New.Name` is not virtual,
// so compiler sees `n.Name` as a completely different property
Console.WriteLine(n.Name); // prints "New"
但我的问题是,如果我们同时使用New n = new New();
而不是new
个关键字,它会打印相同的结果“新”。那么新关键字的必要性是什么? 为什么和 WHEN 我们使用New关键字?谁能告诉我它到底有用吗?举几个例子?
(2。)
class Program
{
public class A
{
public virtual string GetName()
{
return "A";
}
}
public class B : A
{
public override string GetName()
{
return "B";
}
}
public class C : B
{
new public string GetName()
{
return "C";
}
}
static void Main(string[] args)
{
A instance = new C();
Console.WriteLine(instance.GetName());
Console.ReadLine();
}
}
在上面的示例中,打印B
为什么不C
? ,我的问题是,如果新关键字将隐藏基类成员然后为什么这里B没有隐藏?我读了很多堆栈overfolw答案但仍然我与new
关键字混淆了一些请清除我的怀疑