为什么"新" C#中的关键字

时间:2014-02-10 12:53:39

标签: c# c#-4.0

我已经阅读了许多关于“方法隐藏,新关键字,覆盖及其差异”的堆栈溢出问题和答案,但我仍然对为什么使用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关键字混淆了一些请清除我的怀疑

0 个答案:

没有答案