0

次のように、基本クラスにメソッドを実装しました。

  class A
    {
        protected void f1()
        {

        }
    }
    class A1 : A
    {
        public void f2()
        {
           //Simple Calling
            f1();
           //Calling using base pointer
            base.f1();
        }

    }

単純な呼び出しとベースポインターを使用した呼び出しの違いは何ですか? いずれかの方法の利点は何ですか?

4

7 に答える 7

3

あなたの例では違いはありません。ただし、f1仮想であり、A1クラスに別の実装がある場合の状況を考慮してください。

class A
{
    protected virtual void f1()
    {
        Console.WriteLine("A");
    }
}

class A1 : A
{
    public void f2()
    {
       //Simple Calling - prints `A1`
        f1();
       //Calling using base pointer - prints `A`
        base.f1();
    }

    protected override void f1()
    {
        Console.WriteLine("A1");
    }
}

f1()その時とは違いbase.f1()ます。newキーワードを使用して派生クラス内の基本実装を非表示にすると、同じ状況が発生します。

protected new void f1()
{
    Console.WriteLine("A1");
}
于 2013-08-22T10:17:45.783 に答える
1

基本メソッドの機能を拡張したいが、それを複製したくない場合にも役立ちます。

class A
{
    public virtual void F()
    {
        Console.WriteLine("A");
    }
}

    class B : A
    {
        public override void F()
        {
            base.F();
            Console.WriteLine("B");
        }

        void Test()
        {
            F(); // Prints "A B"
        }
    }
于 2013-08-22T10:18:41.210 に答える