');

C# Language "Cacher" les membres avec une implémentation explicite

Exemple

Ne le détestez-vous pas lorsque les interfaces vous polluent la classe avec trop de membres dont vous ne vous souciez même pas? Eh bien, j'ai une solution! Implémentations explicites

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

Normalement, vous implémenteriez la classe comme ceci.

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

     }

     public void SendMessage(){

     }

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

Chaque membre est public

var obj = new MyObjectWithMessages();

// why would i want to call this function?
obj.OnMessageRecieve();

Réponse: je ne sais pas Donc, il ne devrait pas non plus être déclaré public, mais le simple fait de déclarer les membres comme privés entraînera une erreur du compilateur.

La solution consiste à utiliser une implémentation explicite:

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

    void IMessageService.SendMessage() {
        
    }

    string IMessageService.Result { get; set; }
    int IMessageService.Encoding { get; set; }
}

Alors maintenant, vous avez implémenté les membres comme il se doit et ils n'exposent aucun membre en tant que public.

var obj = new MyObjectWithMessages();

/* error member does not exist on type MyObjectWithMessages. 
 * We've succesfully made it "private" */
obj.OnMessageRecieve();

Si vous voulez sérieusement accéder au membre même s'il est explicitement implémenté, tout ce que vous avez à faire est de placer l'objet sur l'interface et de continuer.

((IMessageService)obj).OnMessageRecieve();