繁体   English   中英

向从接口继承的类中添加方法

[英]Adding a method to class that inherits from an Interface

这是.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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM