使用显式实现隐藏成员

当界面污染你的类有太多你甚至不关心的成员时,你不讨厌它吗?好吧,我有一个解决方案! 明确的实现

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