【问题标题】:How Inheritance works in C# [duplicate]继承在 C# 中的工作原理 [重复]
【发布时间】:2019-07-25 02:46:06
【问题描述】:

我有代码

using System;

namespace ExploreOOP
{
    class Program
    {
        static void Main(string[] args)
        {    
            Base1 b1 = new Derived1();
            Derived1 d1 = new Derived1();
            b1.write();
            d1.write();

            Console.WriteLine();
            Console.WriteLine();


            Base2 b2 = new Derived2();
            Derived2 d2 = new Derived2();
            b2.write();
            d2.write();


            Console.WriteLine();
            Console.WriteLine();

            Base3 b3 = new Derived3();
            Derived3 d3 = new Derived3();
            b3.write();
            d3.write();

            Console.ReadKey();

        }
    }

    public class Base1
    {
        public void write()
        {
            Console.WriteLine("Inside Base1 class");
        }
    }

    public class Derived1 : Base1
    {
        public void write()
        {
            Console.WriteLine("Inside Derived1 class");
        }
    }

    public class Base2
    {
        public virtual void write()
        {
            Console.WriteLine("Inside Base2 class");
        }
    }

    public class Derived2 : Base2
    {
        public override void write()
        {
            Console.WriteLine("Inside Derived2 class");
        }
    }

    public class Base3
    {
        public void write()
        {
            Console.WriteLine("Inside Base3 class");
        }
    }

    public class Derived3 : Base3
    {
        new public void write()
        {
            Console.WriteLine("Inside Derived3 class");
        }
    }

}

然后输出,

Inside Base1 class
Inside Derived1 class


Inside Derived2 class
Inside Derived2 class


Inside Base3 class
Inside Derived3 class

所以我的问题是,

public class Base1
{
    public void write()
    {
        Console.WriteLine("Inside Base1 class");
    }
}

public class Derived1 : Base1
{
    public void write()
    {
        Console.WriteLine("Inside Derived1 class");
    }
}

public class Base3
{
    public void write()
    {
        Console.WriteLine("Inside Base3 class");
    }
}

public class Derived3 : Base3
{
    new public void write()
    {
        Console.WriteLine("Inside Derived3 class");
    }
}

做同样的事情吗?

【问题讨论】:

  • 我运行它并在此处提供输出。请仔细阅读。

标签: c# oop inheritance


【解决方案1】:

来自new modifier 上的 C# 参考:

当用作声明修饰符时,new 关键字显式隐藏从基类继承的成员。当您隐藏继承的成员时,该成员的派生版本将替换基类版本。尽管您可以在不使用 new 修饰符的情况下隐藏成员,但您会收到编译器警告。如果您使用 new 显式隐藏成员,它会抑制此警告。

这表示是的,Derived3Derived1本质上是一样的,只是第一种情况会输出一个警告,具体是

warning CS0108: 'Derived1.write()' hides inherited member 'Base1.write()'. Use the new keyword if hiding was intended.  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 2016-09-21
    • 2019-01-24
    • 2016-07-04
    • 2015-12-07
    • 1970-01-01
    相关资源
    最近更新 更多