将方法添加到从接口继承的类

本文关键字:继承 接口 方法 添加 | 更新日期: 2023-09-27 18:36:51

这是.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"的第一个参数

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

将方法添加到从接口继承的类

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

在接口中添加方法声明。

public interface IDocumentObject
{
void NewMethod();
}

或者,如果您不希望它在接口中,则必须创建类类型的类的实例,而不是接口的类型。

DocumentModel doc = new DocumentModel();

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();