2012-10-02 9 views
7

この機能を実装することは可能ですか? 私は2つの抽象クラスをした、と私は実装され、最終的なクラスメソッドは、その後ベースで使用されていることを二つのクラス.net抽象クラスからの複数の継承

public abstract class A 
{ 
    private void MethodA() 
    { 
     var fool = Prop*2; 
    } 
    public abstract int Prop { get; } 
} 
public abstract class B 
{ 
    private void MethodB() 
    { 
     //.... 
     SomeMethod(); 
     //.... 
    } 
    public abstract void SomeMethod(); 
} 

public class C: A, B 
{ 
    public int Prop { .... } 
    public void SomeMethod { .... } 
} 

ここでの主な問題のすべての抽象メソッドを実装するため 第三のクラスを強制したいです抽象クラスであり、これはインタフェースでは実現できません。だから回避策はありませんか?

私は多くの同様のq/aを読みましたが、私の問題には何も反応しません。 ありがとう

+0

クラウディオが述べたように、複数の継承は許可されていません。ここでは、テーマに関するいくつかの良い読書です:http://blogs.msdn.com/b/dachou/archive/2008/04/17/net-and-multiple-inheritance.aspx – Gromer

答えて

10

いいえ、C#は多重継承をサポートしていません。あなたは複数のインターフェースを実装することができますが、それは明らかに同じではありません。なぜならインターフェースは具体的な動作を実装できないからです。

+0

ここでの主な問題は、実装された最終クラス基本抽象クラスではメソッドが使用されますが、これはインタフェースでは実現できません。だから回避策はありませんか? –

+3

@Michele Virgilio:短い答えは、あなたのクラスの新しいデザインを除いては回避策がないことです。 –

1

具体的には?いいえ、複数の継承はC#ではサポートされていません。

あなたは他の二つを組み合わせインタフェース使用されるだろう得ることができる最も近い:次に、あなたがタイプICombinedの引数を必要とする可能性があるが、これは完全にあなたが後にしているものを取得していません

public interface ISomeInterfaceA 
{ 
    int Prop { get; } 
} 

public interface ISomeInterfaceB 
{ 
    void SomeMethod(); 
} 

public interface ICombined : ISomeInterfaceA, ISomeInterfaceB 
{ 

} 

を。私はこれを行うにした場合たとえば、:

public class A : ISomeInterfaceA, ISomeInterfaceB 
{ 
    ... 
} 

を私は明示的に組み合わせたインターフェイス、それはで構成されますちょうど2つのインターフェイスを実装していなかったので、これは、資格はありません。

0

あなたは、最終的なクラスに機能を実装するために喜んでいる場合は、インターフェイスを作成し、好きなだけを実装することができます...

2

あなたはミックスインを経由してC#でこれを行うことができ、それは違った多重継承より実施しています最後にいくつかのクラスからすべてのメソッドを持つオブジェクトを取得します。

これは言語の機能ではありませんが、第三者にも見られます。

あなたはmy answer to this other question上、または直接関心のre-mix's codeplex

いくつかのポイントにそれについて読むことができます:
- あなたは、このように外部から新たに作成されたクラスの動作を変更する、ミックスインのメソッドをオーバーライドすることができます。
- スコープ内での作成中にクラスが異なるスコープを作成できます。
- 工場でミックスインされたオブジェクトを作成する必要があります(新しいMyObject()はミックスインを考慮に入れません)、ありがたいことに)。

関連する問題