[英]Is it possible to not implement a method inherited from an interface in C#?
纵观Project Server 2010的SDK(发现这里在.net反射,我发现一些有趣的事情是让我困惑。
显然, ProjectServerServices.dll
的SvcProject.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.