静的メソッドが C# でインターフェイスを実装しない理由を理解する
C# では、静的メソッドがインターフェイスを実装することを禁止しています。 この制限は、インターフェースの中心的な概念、つまりクラス.
の動作規約の定義に根ざしています。インターフェイスは、クラスが実行する必要がある操作を指定します。 ただし、静的メソッドは、特定のクラス インスタンスではなく、型レベルで動作します。 したがって、静的メソッド インターフェイスの実装を許可すると、オブジェクト指向プログラミングの原則に矛盾します。
具体的な例:
<code class="language-csharp">public interface IListItem { string ScreenName(); } public class Animal : IListItem { // Incorrect: Static method violates the interface contract public static string ScreenName() { return "Animal"; } // ... other members ... }</code>
ScreenName
メソッドは、理想的には、特定の IListItem
インスタンスの表示名を返す必要があります。 Animal
の静的実装には、個々の特性を無視して、すべての 動物に対して「Animal」を返すため、欠陥があります。
推奨される解決策:
<code class="language-csharp">public class Animal : IListItem { public const string AnimalScreenName = "Animal"; public string ScreenName() { return AnimalScreenName; } }</code>
この改訂されたアプローチでは、定数プロパティを使用して静的な名前を保持します。次に、ScreenName
メソッドはこの定数にアクセスし、インターフェイスの要求に応じてインスタンスベースの動作を維持します。 これにより、インターフェースコントラクトが正しく履行されることが保証されます。
以上が静的メソッドが C# のインターフェイスを実装できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。