0

这是 .NET 4.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”的定义,并且没有
扩展方法“NewMethod”接受“IDocumentObject”类型的第一个参数

如何向我的类中添加不在接口中的方法?谢谢

4

3 回答 3

4

使用显式类型“DocumentModel”而不是var 在创建 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 回答