1

2 つの抽象クラスを作成し、両方を継承するクラスを作成しようとしました。しかし、エラーメッセージが表示されます。

abstract class AbstractClassOne
{
    public abstract void ShowMessage();
    public abstract void DisplayName();
}

abstract class AbstractClassTwo
{
    public abstract void ShowMessage();
    public abstract void DisplayPlace();
}

class DerivedClass : AbstractClassOne, AbstractClassTwo // here under AbstractClassTwo it shows the error "cannot have multiple base classes:"
{

}

では、クラスは 1 つの抽象クラスからのみ派生できるのでしょうか?

複数の抽象クラスから派生できる場合、上記の場合のように、両方のクラスが同じメソッドを定義するとどうなりますか (抽象クラス 1 と 2 の両方に methodshowmessage()があるため、どちらが派生クラスになります)。

4

4 に答える 4

4

多重継承は C# では許可されていませんが、C++ では許可されています。ShowMessage()「ダイヤモンド問題」と呼ばれる多重継承を伴う c++ の既知の問題であるメソッドに関する質問に答えるに は。参照: http://en.wikipedia.org/wiki/Multiple_inheritance

したがって、基本的には、呼び出すときに参照しているメソッドを興奮状態にする必要があります。 ParentA::ShowMessage()

他の 2 つの型にポリモーフィックな型が必要な場合は、2 つの別個のインターフェイスを作成して実装する必要があります。同じメソッドを再利用したい場合は、合成を使用する必要があります。

インターフェイスの例:

public interface ISomeInterface
{
    public void ShowMessage();
    public void DisplayName();
}
public class ClassOne : ISomeInterface
{
    public void ShowMessage()
    {
       //implementation
    }

    public void DisplayName()
    {
       //implementation
    }
}

public class ClassTwo : ISomeInterface
{
    public void ShowMessage()
    {
       //implementation
    }

    public void DisplayPlace()
    {
       //implementation
    }
}

コンポジションを使用した再利用可能な Show Message メソッドとのインターフェース:

public class ClassTwo : ISomeInterface
{
    private ISomeInterface _MyPrivateReusableComponent = new ClassOne();

    public void ShowMessage()
    {
       _MyPrivateReusableComponent.ShowMessage()
    }

    public void DisplayPlace()
    {
         _MyPrivateReusableComponent.DisplayName()
        //implementation
    }
}
于 2013-03-05T05:14:34.400 に答える
4

C# では、複数のクラスから継承することはできません。ここで必要なことを行うには、インターフェイスを使用する必要があります。

abstract class AbstractClassOne
{
    public abstract void ShowMessage();
    public abstract void DisplayName();
}

Interface IClassTwo
{
    void ShowMessage();
    void DisplayPlace();
}

class DerivedClass : AbstractClassOne, IClassTwo
{

}
于 2013-03-05T05:10:15.757 に答える
2

複数のクラス (抽象またはそれ以外) から継承することはできませんが、この場合、抽象クラスはほとんどインターフェイスであるため、それらをインターフェイスに変換して継承できます (任意の数のインターフェイスから継承できます)。

于 2013-03-05T05:11:16.367 に答える
1

いいえ、抽象クラスがすべての抽象メソッドを持っているか、一部だけを持っているかに関係なく、継承に関する限り違いはありません。継承できるクラスは 1 つだけ(C# の場合) で、必要な数のインターフェイスを継承できます。

于 2013-03-05T05:21:55.463 に答える