10
votes

Est-il possible de forcer une mise en œuvre explicite d'une interface (ou d'une partie de celle-ci)?

permet de dire que j'ai une interface comme ceci: xxx

existe-t-il un moyen de forcer l'agent de mise en œuvre de l'interface à implémenter des parties de celui-ci explicitement? Quelque chose comme: xxx

éditer: pourquoi je tiens à savoir si l'interface est mise en œuvre explicitement ou non; Ce n'est pas comme ça que ça compte aussi loin que la fonctionnalité va, mais il pourrait être utile de cacher certains détails inutiles des personnes utilisant le code.

J'essaie d'imiter plusieurs héritage dans mon système, à l'aide de ce motif: xxx

si la propriété MovaBlecomonent a été mise en œuvre explicitement, elle serait, dans La plupart des cas, soyez cachés à celui qui utilisait la classe. J'espère que l'explication n'était pas trop horrible.


7 commentaires

Vous recherchez virtuel ? Cela devrait vous permettre de déclarer une méthode explicite à cet égard.


Vous ne pouvez pas implémenter des pièces d'une interface. C'est tout ou rien.


Pourquoi vous souciez-vous s'il est mis en œuvre explicitement ou implicitement?


Ne pas imiter plusieurs héritages. Ce n'est pas une partie de la langue C #. Survolez cela et mettez en œuvre les choses de la manière C #.


Cela signifie que la "manière C #" me forcerait à mettre en œuvre les mêmes interfaces dans des centaines de classes différentes. De plus, autant que je sache, la composition n'est pas un anti-motif, donc je ne vois pas le problème.


Forcer des interfaces explicites est ce que nous recherchons tout ce que nous cherchons à remplacer le mot-clé "ami" de C ++ !!! Super!!! Nous en avons besoin!


Oui c'est vrai. Mais l'objectif de cacher est également significatif lorsque vous mettez en œuvre des classes parent-enfant où les parents doivent connaître ses enfants et vice versa. Sans cacher l'un des champs, vous ne pouvez pas construire une architecture solide.


3 Réponses :


12
votes

Non, il n'est pas possible de forcer les responsables de la mise en œuvre explicite ou implicite d'une interface.


0 commentaires

0
votes

Ce que vous cherchez s'appelle une classe abstraite


2 commentaires

Cela ne répond pas à ma question.


Non, ce n'est pas ce qu'il cherche. Il y a une raison pour laquelle vous souhaitez utiliser des interfaces pour encapsuler la fonctionnalité plutôt que de limiter l'assurance fonctionnalité à une dérivation de base de base.



0
votes

Si la propriété MoveComomonent a été mise en œuvre explicitement, elle serait dans la plupart des cas cachée de celui qui utilisait la classe.

L'objectif de la mise en œuvre de l'interface explicite n'est pas de masquer la mise en œuvre, il est de permettre des collisions entre interfaces qui définissent la même contrainte mais ne peuvent pas respecter la même mise en œuvre.
En raison de cela, il devient inévitable nécessaire de cacher tout sauf une des implémentations en collision lors de l'utilisation du type réel, mais uniquement "révélatrice" lorsque le type d'interface spécifique est utilisé. Mais ce n'est pas le but premier, il n'est pas simplement une conséquence logique de devoir résoudre l'ambiguïté d'une certaine manière que le développeur peut choisir activement la bonne implémentation au bon moment.

Deuxièmement, en tant que concepteur d'interface, vous devriez vous inquiéter de la mise en œuvre spécifique, ni la manière dont la classe d'exécution est traitée par une tierce partie. Vous traversez quelques frontières ici et essayez d'effectuer le changement du mauvais point d'origine.


0 commentaires