これは大きな質問であり、自分のプロジェクトで遭遇した問題です。
多態性のためだけにインターフェイスと抽象クラスが存在し、強制的に特定のメソッドを実装するためのクラスはありません。個人的には、多形性が主要な使用例であり、強制的な実装が二次的なものであると考えます。私は強制的な実装方法をかなり頻繁に使用しています。通常、テンプレートパターンを実装するフレームワークコードに表示されます。基本/テンプレートクラスは複雑なアイデアをカプセル化し、サブクラスは抽象メソッドを実装することでさまざまなバリエーションを提供します。実用的なメリットの1つは、抽象メソッドがサブクラスを実装する他の開発者にガイダンスを提供することです。 Visual Studioには、メソッドをスタブする機能もあります。これは、保守開発者が数か月後に新しいサブクラスを追加する必要がある場合に特に役立ちます。
C#では、これらのテンプレートシナリオのいくつかについて特別なサポートはないという欠点があります。静的メソッドは1つです。もう一つはコンストラクタです。理想的には、ISerializableは、開発者に保護された直列化コンストラクタを実装させる必要があります。
最も簡単なアプローチは、自動テストを使用して静的メソッドが目的の型に実装されているかどうかをチェックすることです(前述)。既に言及されている別の実行可能なアイデアは、静的解析ルールを実装することです。
第3のオプションは、PostSharpなどのAspect-Oriented Programmingフレームワークを使用することです。 PostSharpは、コンパイル時の側面の検証をサポートしています。コンパイル時にアセンブリに反映される.NETコードを記述して、任意の警告とエラーを生成することができます。通常、アスペクトの使用が適切であることを検証するためにこれを行いますが、テンプレートルールの検証にも使用できない理由はわかりません。
私の好奇心は嬉しいですが、なぜこのような機能が必要なのでしょうか?静的メソッドは、通常のインスタンス(非静的)メソッドにはないものは何ですか?私の心には何も来ません。あなたの質問にいくつかの文脈を共有したいと思っていますか? – Dan
静的メソッドを呼び出すためのインスタンスは必要ありません。したがって、デシリアライズメソッドなどのファクトリメソッドとして使用するのがうれしいです。 – tpower
@ダン:インスタンスやタイプを操作しているかどうか(または後で変更するかどうか)を知らなくても、インタフェースを使用することができます。何らかの種類のシングルトンリストを表す静的クラスを考えてください。適切なリストとして 'IList'を実装する必要があります。確かに、静的クラスに 'IList 'を実装したクラスのインスタンスを保存することの回避策が実現可能です(そして、私はC#が今のところそれだけを許していることを認識しています)。しかし、静的にクラスを直接宣言する能力インタフェースを実装すると、不要なレベルの間接指定が削除されます。 –