C#语言用显式实现“隐藏”成员

示例

当接口污染了你的类,并且有太多你根本不关心的成员时,你不讨厌吗?我有办法了!显式实现

public interface IMessageService {
    void OnMessageRecieve();
    void SendMessage();
    string Result { get; set; }
    int Encoding { get; set; }
    // code
}

通常,您将实现此类。

public class MyObjectWithMessages : IMessageService {
     public void OnMessageRecieve(){

     }

     public void SendMessage(){

     }

     public string Result { get; set; }
     public int Encoding { get; set; }
}

每个成员都是公开的。

var obj = new MyObjectWithMessages();

// 我为什么要调用此功能?
obj.OnMessageRecieve();

答:不。因此,既不应将其声明为public,而只是将成员声明为private会使编译器抛出错误

解决方案是使用显式实现:

public class MyObjectWithMessages : IMessageService{
    void IMessageService.OnMessageRecieve() {
        
    }

    void IMessageService.SendMessage() {
        
    }

    stringIMessageService.Result{ get; set; }
    intIMessageService.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();