2

全て -

new キーワードとそれをいつ使用すべきかについて、さまざまな記事を読みました。

MSDN - http://msdn.microsoft.com/en-us/library/6fawty39(v=vs.80).aspx

StackOverflow -基本クラス メンバーと同じ名前を持つ派生クラス メンバーで new キーワードを使用する利点

これは、この概念を実践するために私が書いたサンプルコードです

    static void Main(string[] args)
    {
        Animal a2 = new Dog();
        a2.Talk();
        a2.Sing();
        a2.Greet();
        a2.Dance();
        Console.ReadLine();
    }

class Animal
{
    public Animal()
    {
        Console.WriteLine("Animal constructor");
    }

    public void Talk()
    {
        Console.WriteLine("Animal is Talking");
    }

    public virtual void Sing()
    {
        Console.WriteLine("Animal is Singing");
    }

    public void Greet()
    {
        Console.WriteLine("Animal is Greeting");
    }

    public virtual void Dance()
    {
        Console.WriteLine("Animal is Dancing");
    }
}

//Derived Class Dog from Animal
class Dog : Animal
{
    public Dog()
    {
        Console.WriteLine("Dog Constructor");
    }

    public new void Talk()
    {
        Console.WriteLine("Dog is Talking");
    }

    public override void Sing()
    {
        //base.Sing();
        Console.WriteLine("Dog is Singing");
    }

    public new void Dance()
    {
        Console.WriteLine("Dog is Dancing");
    }
}

私の出力は次のようになります:

ここに画像の説明を入力

私を混乱させているのは、派生クラスで new キーワードを使用すると、実際には基本クラスの出力が表示されることです。それは間違っている - 基本クラスのメンバーシップを非表示にすることになっている新しいキーワードではないため、Animal is Talking および Animal is Dancing の結果は出力されません。

ありがとう

4

2 に答える 2

7

「新規」は、メソッドが「新規」であり、「オーバーライド」ではないことを意味します。したがって、ベースからその名前でメソッドを呼び出すと、オーバーライドされていないため、派生は呼び出されません。

于 2012-08-10T15:18:12.783 に答える
0

これも私を混乱させましたが、簡単に言えば:

new キーワードは、子のメンバーを親から隠します。

于 2016-05-01T14:40:39.670 に答える