Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 继承如何在C中工作#_C#_Oop_Inheritance - Fatal编程技术网

C# 继承如何在C中工作#

C# 继承如何在C中工作#,c#,oop,inheritance,C#,Oop,Inheritance,我有密码 using System; namespace ExploreOOP { class Program { static void Main(string[] args) { Base1 b1 = new Derived1(); Derived1 d1 = new Derived1(); b1.write(); d1.write();

我有密码

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");
    }
}

做同样的事情吗?

来自以下网站上的C#参考:

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

这意味着是的,
Derived3
Derived1
基本相同,但第一种情况将输出警告,特别是

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

我运行它,并在这里给出输出。请仔细阅读。
warning CS0108: 'Derived1.write()' hides inherited member 'Base1.write()'. Use the new keyword if hiding was intended.