繁体   English   中英

是否可以不实现从C#接口继承的方法?

[英]Is it possible to not implement a method inherited from an interface in C#?

纵观Project Server 2010的SDK(发现这里在.net反射,我发现一些有趣的事情是让我困惑。

显然, ProjectServerServices.dllSvcProject.ProjectClient类继承自System.ServiceModel.ClientBase<Project> ,后者是实现System.IDisposable接口的抽象类。 但是,当我检查SvcProject.ProjectClient类(不是抽象的)时,没有Dispose方法。 是什么赋予了? 我认为从接口继承的每个方法都必须在具体的实现中实现(否则接口的用途是什么)。 .NET Reflector对我说谎吗? Microsoft是否出于某种原因绕过了此要求? 这是怎么回事?

它可能是显式实现的,如下所示:

void IDisposable.Dispose()
{
    // Code here
}

要么它继承了基类的方法。 仅仅因为ClientBase<T>是抽象的,并不意味着它本身不能正确实现IDisposable 确实,它将不得不实现它或将其重新声明为一种抽象方法,以强制派生类实现它。

无论哪种方式,该方法都会以某种方式存在。

显式接口实现意味着仅当通过接口类型查看实例时,该方法才可用。 例如:

class Foo : IDisposable
{
    void IDisposable.Dispose() {}
}

...

Foo foo = new Foo();
foo.Dispose(); // Invalid: compile time error
IDisposable d = foo;
d.Dispose();   // Valid
((IDisposable)foo).Dispose(); // Valid (no need for temp variable)

不用看,我会说基类提供Dispose方法,而具体类根本不会覆盖它。 编辑 :并且(在查看之后),它确实提供了IDisposable.Dispose作为非抽象的显式实现。

暂无
暂无

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

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