使用顯式實現隱藏成員
當介面汙染你的類有太多你甚至不關心的成員時,你不討厭它嗎?好吧,我有一個解決方案! 明確的實現
public interface IMessageService {
void OnMessageRecieve();
void SendMessage();
string Result { get; set; }
int Encoding { get; set; }
// yadda yadda
}
通常你會像這樣實現這個類。
public class MyObjectWithMessages : IMessageService {
public void OnMessageRecieve(){
}
public void SendMessage(){
}
public string Result { get; set; }
public int Encoding { get; set; }
}
每個成員都是公開的。
var obj = new MyObjectWithMessages();
// why would i want to call this function?
obj.OnMessageRecieve();
答:我沒有。因此,它既不應該被公開,而只是將成員宣告為私有會使編譯器丟擲錯誤
解決方案是使用顯式實現:
public class MyObjectWithMessages : IMessageService{
void IMessageService.OnMessageRecieve() {
}
void IMessageService.SendMessage() {
}
string IMessageService.Result { get; set; }
int IMessageService.Encoding { get; set; }
}
因此,現在你已根據需要實施了成員,並且他們不會公開任何成員。
var obj = new MyObjectWithMessages();
/* error member does not exist on type MyObjectWithMessages.
* We've succesfully made it "private" */
obj.OnMessageRecieve();
如果你真的仍然想要訪問該成員,即使是明確實現,你只需將物件強制轉換為介面即可。
((IMessageService)obj).OnMessageRecieve();