2016-11-02 12 views
-3

グッドイブニングにクラスを拡張]を選択します例えば、クラスAまたはクラスB私はC#で2つの抽象クラスを持っている誰もが、</p> <p>にランタイムC#

を拡張:

public Class C : B or A 

abstracの両方tクラスは、同じシグネチャを持つ1つの抽象メソッドを提供します。

+0

設定ファイル –

+0

で指定されたフラグを使用してifループを使用できます。抽象メソッドの実装についてはどうですか? – CodeNotFound

+6

実際に達成しようとしていることを説明してください。これは[XY問題](http://xyproblem.info/)と非常によく似ています。ちょうど絶対に明白であるように - あなたはあなたが尋ねたことをすることはできません。継承はコンパイル時の機能です。実行時に変更することはできません(技術的には、新しいクラスを生成することは技術的には可能ですが、これは決して適切な答えではありません)。 –

答えて

2

いいえ、コンパイル時に基本クラスが定義されているため、実行時に基本クラスを変更/選択することはできません。

両方のクラスで共通のインターフェイスを実装しているように聞こえますが、それ以外のインターフェイスを使用すると、あなたのケースでは良い解決策になります。

interface IListener 
{ 
    void Listen(); 
    ... 
} 

class CA : A, IListener{ .... } 
class CB : B, IListener { .... } 

// to use: 
IListner listener = useSSL ? new CA(...) : new CB(...);  
+1

@CodeNotFound実行時に新しいクラスを作成できますが、実行時に基本クラスを変更することはできません。 –

+0

ha!私は最初のコメントを削除しました。うん、それは私が思うものです:D – CodeNotFound

1

私はあなたの質問やコメント(@RBが言ったことを確認してください)から正しく理解していた場合は、適切な行動を定義するには、次のようになります。

public interface IC 
{ 
} 

public class A : IC 
{ 
} 

public class B : IC 
{ 
} 

は、インターフェイスを消費するようにコードを書くと、正しいコンクリートクラスを消費者に注入する方法を考案する。

関連する問題