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

Ste*_*ley 0 c# implementation interface

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

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

Jon*_*eet 9

它可能是明确实现的,如下所示:

void IDisposable.Dispose()
{
    // Code here
}
Run Code Online (Sandbox Code Playgroud)

要么是它还是从基类继承了该方法.仅仅因为它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)
Run Code Online (Sandbox Code Playgroud)


tva*_*son 6

不看,我会说基类提供Dispose方法,具体类根本不会覆盖它. 编辑:和(看后),它提供了一个非抽象的,显式的实现IDisposable.Dispose.