0

インターフェイスに許可されるサブクラスを指定する方法はありますか?

私がこのクラスを持っているとしましょう:

public interface IDoable // specify that only A or it's subclasses can implement IDoable
{
    void Do();
}

public class A : IDoable
{
    public void Do(){};
    public void Foo(){};
}

public class B : IDoable // implementing IDoable on something other than A or its sublcasses doesn't make any sense
{
    // public void Do();
}

後で私はこれを行うことができるようになります:

IDoable d = new A();
d.Do();
d.Foo(); // I'd like to be able to do this.

C#はこの種の機能をサポートしていますか?

4

3 に答える 3

3

いいえ、そうではありません。インターフェイスはコントラクトを表し、インターフェイスにアクセスできるすべてのクラスがそれを実装できます。

もちろん、アクセスを制限することもできますinternal(したがって、同じアセンブリのみがアクセスできます)。

于 2012-09-04T15:13:16.807 に答える
2

あなたはそれに呼び出すことができるようにするためにキャスト dすることができます:AFoo

((A)d).Foo();

dそうでない場合A、これは例外をスローすることに注意してください。

d他のオプションは、 usingisまたはas演算子のタイプをテストすることです。

もちろん、これは最初にインターフェースを使用するという点に反します。

于 2012-09-04T15:12:00.067 に答える
2

インターフェイスに許可されるサブクラスを指定する方法はありますか?

いいえ、どのクラスも、アクセス可能である限り、インターフェースを実装できます。インターフェイスの要点は、具体的なタイプ/実装をコンシューマーから隠すことです。そのため、私にとっては、提案する方法でそれを結合することは意味がありません。

于 2012-09-04T15:15:58.627 に答える