3

なぜ私はこれを行うことができないのですか?

internal class InsuranceClientFactory : IInsuranceClientFactory
{
    internal Iws2SoapClient InsuranceClient()
    {

    }
}

internal interface IInsuranceClientFactory
{
  Iws2SoapClient InsuranceClient();
}

エラーが発生します:

パブリックではないため、インターフェイス メンバーを実装できません

クラスは公開されているがインターフェイスは公開されていないという質問がいくつかありますが、私の両方は内部です。このクラスまたはインターフェイスをアセンブリの外部に公開したくありません。奇妙な制限のようです。

この質問C# internal interface with internal implementationは、「インターフェイスを暗黙的に実装している場合、メンバーは public と宣言する必要があると思います」と述べています。しかし、これは私には意味がありません。正当化されているようですか?

4

4 に答える 4

1

うまくいかない理由はわかります。C# 言語仕様 5.0 セクション 13.4.4、インターフェイス マッピング。

... 非公開メンバーも静的メンバーもインターフェイス マッピングに参加しません ...

しかし、あなたがやろうとしていることは技術的にうまくいくはずなので、明示的な実装が優先され、あなたの実装は残ることができますinternal

髪を分割するのではなく、内部インターフェイスを明示的に実装したとしても、実装internalは実際にはそうではありませんprivate/public仕様で前述したように (セクション 13.4.1 明示的なインターフェイスメンバーの実装):

明示的なインターフェイス メンバーの実装には、他のメンバーとは異なるアクセシビリティ特性があります。明示的なインターフェイス メンバーの実装は、メソッド呼び出しまたはプロパティ アクセスで完全修飾名を介してアクセスできないため、ある意味で非公開です。ただし、インターフェイス インスタンスを介してアクセスできるため、ある意味ではパブリックでもあります。

于 2013-08-08T15:32:14.617 に答える