使用顯式實現隱藏成員

當介面汙染你的類有太多你甚至不關心的成員時,你不討厭它嗎?好吧,我有一個解決方案! 明確的實現

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();