将方法添加到从Interface继承的类

时间:2012-06-12 14:00:27

标签: c# c#-4.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'类型的第一个参数

如何向不在界面中的类添加方法?感谢

3 个答案:

答案 0 :(得分:4)

在创建DocumentModel类的对象时,使用显式类型“DocumentModel”而不是var

答案 1 :(得分:3)

在界面中添加方法声明。

public interface IDocumentObject
{
void NewMethod();
}

或者如果你不想在界面中使用它,你将不得不创建类的类的实例,而不是接口的类型。

DocumentModel doc = new DocumentModel();

答案 2 :(得分: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();