0

以下の例では、ClassyFooを使用してクラスFooを拡張し、ClassyFooによって作成されたBarインスタンスがClassyFooから継承され、Fooによって作成されたBarインスタンスが引き続きFooから継承されるようにすることは可能ですか?

例えば:

    class Foo
    {
        protected Foo()
        {
            Console.WriteLine("Setting up Foo");
        }

        public static void Show()
        {
            Console.WriteLine("Showing Foo");
            var bar = new Bar();
        }
    }

    class ClassyFoo : Foo
    {
        public ClassyFoo() : base()
        {
            Console.WriteLine("Setting up Classy Foo");
        }

        public new static void Show()
        {
            Console.WriteLine("Showing Classy Foo");
            var bar = new Bar();
        }
    }

    class Bar: Foo
    {
        public Bar() : base()
        {
            Console.WriteLine("Setting up Bar");
        }
    }

ClassyFoo.Show()の目的の出力は次のとおりです。

上品なFooの
表示Fooの設定
上品なFooの
設定バーの設定

そして、Foo.Show()の出力は次のとおりです。

Fooの
設定Fooの
設定バーの表示

状況は、クラスBarがFooにいくつかの構成/特殊化を追加することですが、ClassyFooも同様です。ただし、BarとClassyFooの両方の特殊化が同じオブジェクトに存在する可能性があります。

ClassyFooから継承する重複するBarを避けようとしています。実際には複数のバーがありますが、ClassyFooは1つしかないため、多くの重複が発生します。

4

3 に答える 3

1

それは不可能だと思います。1つのクラスには1つの基本クラスがあります。

ClassyFooやBarをインターフェイスとして実装し、実際のクラスを一方または他方、あるいはその両方から継承させることができる場合があります。

実際の表現とコードの再利用に応じて、両方のインターフェイス(同様の処理)または1つの抽象クラス(そこに大量のコードを詰め込むことができます)を作成します

于 2013-02-01T04:09:53.760 に答える
1

何を達成しようとしているのかわかりませんが、Barのインスタンスを参照しているFoo.Show()を呼び出すと、ClassyFoo siとは何の関係もなく、そこから何も期待できません。

于 2013-02-01T04:20:09.623 に答える
0

C#は多重継承をサポートしていないため、そのためにインターフェイスを使用する必要があります。インターフェイスを使用しないと、それを行うことはできません。

于 2013-02-01T04:13:54.767 に答える