質問: コンストラクタシグネチャを定義するインタフェース? 私がこの問題にぶつかったのは今回が初めてだというのは変です。c#インターフェイスでコンストラクタをどのように定義しますか?編集 例を望んでいる人もいました(これは空き時間のプロジェクトなので、そうです、ゲームです)idrawable +更新 +描く更新(画面の端などをチェック)して描画できるようにするには、常にgraphicsdevicemanagerが必要になります。だから私はオブジェクトがそれへの参照を持っていることを確認したいです。これはコンストラクタに属します。これを書き留めたので、ここで実装しているのはiobservableであり、graphicsdevicemanagerはidrawable...を取るべきであると思います。私はxnaフレームワークを入手できないか、フレームワークがあまりよく考えられていないようです。編集 インターフェースという文脈では、私のコンストラクタの定義について混乱があるようです。インタフェースは実際にはインスタンス化できないので、コンストラクタは必要ありません。私が定義したいのはコンストラクタへの署名でした。インタフェースが特定のメソッドのシグネチャを定義できるのとまったく同じように、インタフェースはコンストラクタのシグネチャを定義できます。
回答: すでによく知られているように、あなたはインターフェース上にコンストラクタを持つことはできません。しかし、これは7年後のグーグルでの非常にランク付けされた結果であるので、私はここでチップインすると思いました同様の状況のために将来必要です。この概念はすでにいくつかのコメントで示唆されていますが、実際にそれを実行する方法を示す価値があると思いました。これまでのところ、これまでのようなメインのインターフェースがあります。public interface idrawable { void update(); void draw(); } それでは、強制したいコンストラクタを使って抽象クラスを作成しましょう。実際には、あなたが最初の質問を書いたときから利用可能になっているので、ここで少しおしゃれにしてこの状況で総称を使うことができますpublic abstract class mustinitialize<t> { public mustinitialize(t parameters) { } } 今度は、idrawableインターフェースとmustinitialize抽象クラスの両方から継承する新しいクラスを作成する必要があります。public class drawable : mustinitialize<graphicsdevicemanager>, idrawable { graphicsdevicemanager _graphicsdevicemanager; public drawable(graphicsdevicemanager graphicsdevicemanager) : base (graphicsdevicemanager) { _graphicsdevicemanager = graphicsdevicemanager; } public void update() { //use _graphicsdevicemanager here to do whatever } public void draw() { //use _graphicsdevicemanager here to do whatever } } それからdrawableのインスタンスを作成するだけでいいのです。idrawable drawableservice = new drawable(mygraphicsdevicemanager); ここで素晴らしいことは、作成した新しいdrawableクラスがまだidrawableに期待されるものとまったく同じように動作することです。mustinitializeコンストラクタに複数のパラメータを渡す必要がある場合は、渡す必要があるすべてのフィールドのプロパティを定義するクラスを作成できます。