C#中子类属性会覆盖父类属性吗?

新手上路,请多包涵

这段代码运行的结果为什么是2,2?子类的属性会覆盖父类的属性吗?

    class Program
    {
        static void Main(string[] args)
        {
            NewClass newClass = new NewClass();
            newClass.ShowId();

        }
    }

    class BaseClass
    {
        public int Id { get; set; }
        public BaseClass()
        {
            this.Id = 1;
        }

    }

    class NewClass:BaseClass
    {
        public NewClass()
        {
            this.Id = 2;
        }
        public void ShowId()
        {
            Console.WriteLine("{0}, {1}", this.Id, base.Id);
        }
    }
阅读 3.3k
1 个回答
新手上路,请多包涵

这个叫覆盖不准确,你的this.ID是通过继承父类的ID来的,也就是说this.ID就是base.ID,只是名字不一样
你如果吧ID改成Object类型,然后看看this.ID和base.ID的引用是否相等就会发现它们的引用时相同的

class BaseClass
{
    public object Id { get; set; }
    public BaseClass()
    {
        this.Id = 1;
    }

}

class NewClass : BaseClass
{
    
    public NewClass()
    {
        this.Id = 2;
    }
    public void ShowId()
    {
        Console.WriteLine("{0}, {1}", this.Id, base.Id);
        Console.WriteLine(Object.ReferenceEquals(this.Id, base.Id));
    }
}

输出结果是:
2, 2
True

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进