2

アセンブリは、いくつかのインターフェイス ( IFirstISecondIThird) を外部に公開します。つまり、これらのインターフェイスはpublicです。

ここで、実装の詳細として、これらのオブジェクトはすべて共通の特性を共有し、 interface によって記述されますIBaseIBaseこれは将来の実装で変更される可能性があり、アセンブリのユーザーにはまったく関係がないため、公開したくありません。

明らかに、パブリック インターフェイスは内部インターフェイスから派生できません (コンパイラ エラーが発生します)。

IFirst内部的な観点からのみ、 、ISecond、およびIThird共通点があることを表現する方法はありますか?

4

2 に答える 2

4

C# にはありません

最善の方法は、クラスに内部インターフェイスとパブリック インターフェイスの両方を実装させることです。

于 2013-02-17T15:29:17.263 に答える
1

アンドリューが上で言ったように。拡張するために、コードサンプルを次に示します。

public interface IFirst
{
    string FirstMethod();
}

public interface ISecond
{
    string SecondMethod();
}

internal interface IBase
{
    string BaseMethod();
}

public class First: IFirst, IBase
{
    public static IFirst Create()  // Don't really need a factory method;
    {                              // this is just as an example.
        return new First();
    }

    private First()  // Don't really need to make this private,
    {                // I'm just doing this as an example.
    }

    public string FirstMethod()
    {
        return "FirstMethod";
    }

    public string BaseMethod()
    {
        return "BaseMethod";
    }
}

public class Second: ISecond, IBase
{
    public static ISecond Create()  // Don't really need a factory method;
    {                               // this is just as an example.
        return new Second();
    }

    private Second()  // Don't really need to make this private,
    {                 // I'm just doing this as an example.
    }

    public string SecondMethod()
    {
        return "SecondMethod";
    }

    public string BaseMethod()
    {
        return "BaseMethod";
    }
}
于 2013-02-17T16:12:40.183 に答える