0

これは.NET4.0/ C#です。インターフェイスから継承するクラスがあります。

public class DocumentModel : IDocumentObject
{
     //this is not in the interface and wont ever be
     public void NewMethod(){//my code}
}

私のDocumentModelクラスでは、インターフェースの一部ではないパブリックメソッドを追加しました。私がそれを呼ぶとき、

var doc = new DocumentModel();
doc.NewMethod();

私は次のようになります:

エラー30「IDocumentObject」には「NewMethod」の定義が含まれておらず、
「IDocumentObject」タイプの最初の引数を受け入れる拡張メソッド「NewMethod 」がありません

インターフェイスにないメソッドをクラスに追加するにはどうすればよいですか?ありがとう

4

3 に答える 3

4

var DocumentModel クラスのオブジェクトを作成する代わりに、明示的な型 "DocumentModel" を使用します。

于 2012-06-12T14:04:48.200 に答える
3

インターフェイスにメソッド宣言を追加します。

public interface IDocumentObject
{
void NewMethod();
}

または、インターフェイスで使用したくない場合は、インターフェイスのタイプではなく、クラスのタイプのクラスのインスタンスを作成する必要があります。

DocumentModel doc = new DocumentModel();
于 2012-06-12T14:02:37.243 に答える
0

Romil の言うことは役に立つかもしれませんが、以下のコードはそのまま実行されます。型を明示的に宣言すると、コンパイラが正しい型を判断するのに役立ちます。を使用varすると、変数コンパイラの型に関する決定が残され、具体的なクラスではなく、インターフェイスとして入力される場合があります。ILSpyのような逆アセンブラーで出力アセンブリを見て、実際に何が起こっているかを確認できます。

using System;
using System.Collections.Generic;

interface iDoc
{

}

class doc : iDoc
{
    public void meth()
    {
        Console.WriteLine("asdf");
    }
}
public class MyClass
{
    public static void Main()
    {
        var d = new doc();
        d.meth();
        Console.ReadLine();
    }
}

さらなる例として、変数の型をインターフェイスとして明示的に宣言した場合でも、それを具体的な型にキャストして、以下のようにメソッドを呼び出すことができます。

iDoc d = new doc();
((doc)d).meth();
于 2012-06-12T14:11:50.647 に答える