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