WCF通道(通过ChannelFactory创建)如何实现ICommunicationObject,但不公开Close()方法,除非您将代理强制转换为ICommunicationObject?那有意义吗?如果WCF代理的方法不可见,WCF代理如何实现ICommunicationObject?
我在今天回家的路上想到了这些,想不通它在我脑海中。也许我问的是错误的问题?也许我在问一个愚蠢的问题? :)
它是某种忍者技巧?
WCF通道(通过ChannelFactory创建)如何实现ICommunicationObject,但不公开Close()方法,除非您将代理强制转换为ICommunicationObject?那有意义吗?如果WCF代理的方法不可见,WCF代理如何实现ICommunicationObject?
我在今天回家的路上想到了这些,想不通它在我脑海中。也许我问的是错误的问题?也许我在问一个愚蠢的问题? :)
它是某种忍者技巧?
这是通过Explicit Interface Implementation完成的。
假设你有一个接口,就像这样:
public interface IFoo
{
void Foo();
}
可以正常实现这一点:或者
public class Bar : IFoo
{
public void Foo() {} // Implicit interface implementation
}
,您可以实现该接口构件明确,这就要求演员:
public class Baz : IFoo
{
void IFoo.Foo() {} // This will require casting the object to IFoo to call
}
Th有时可能会非常有用。例如,在例如首选API将要调用.Close()
的类中经常实现IDisposable
。通过明确地实现IDisposable
,您可以“隐藏”Dispose()
方法,但仍允许通过using语句使用类实例。
Channel
类明确实现了ICommunicationObject
接口。这里有一个例子演示显式接口实现和隐式接口的实现之间的区别:
internal interface IExample
{
void DoSomething();
}
class ImplicitExample : IExample
{
public void DoSomething()
{
// ...
}
}
class ExplicitExample : IExample
{
void IExample.DoSomething()
{
// ...
}
}
class Consumer
{
void Demo()
{
var explicitExample = new ExplicitExample();
// explicitExample.DoSomething(); <-- won't compile
((IExample)explicitExample).DoSomething(); // <-- compiles
var implicitExample = new ImplicitExample();
implicitExample.DoSomething(); // <-- compiles
}
}
这里是对的MSDN文章的链接就这个问题:http://msdn.microsoft.com/en-us/library/ms173157.aspx
感谢,里德和丹!第一个职位获胜。 – 2012-08-07 23:10:55