Vous devriez regarder dans l'Inversion de Contrôle:
Dans un tel scénario, vous ne pouvez pas écrire ceci:
IInterface classRef = new ObjectWhatever();
Vous pouvez écrire quelque chose comme ceci:
IInterface classRef = container.Resolve<IInterface>();
Ce serait aller dans une règle de base de l'installation dans l' container
objet et la construction de l'objet réel pour vous, qui pourrait être ObjectWhatever. La chose importante est que vous pouvez remplacer cette règle avec quelque chose qui a utilisé un autre type d'objet tout à fait, et votre code fonctionne encore.
Si nous partons du Cio sur la table, vous pouvez écrire du code qui sait qu'il peut parler à un objet qui n'quelque chose de spécifique, mais pas le type de l'objet ou de la façon dont il le fait.
Ce serait très pratique lors du passage de paramètres.
Comme pour votre mise entre parenthèses de la question "comment, par ailleurs, pourriez-vous écrire une méthode qui prend un objet qui implémente une Interface? Est-ce possible?", en C#, vous pouvez tout simplement utiliser le type d'interface pour le type de paramètre, comme ceci:
public void DoSomethingToAnObject(IInterface whatever) { ... }
ce peut être branché directement dans le "parler à un objet qui n'est quelque chose de spécifique". La méthode définie ci-dessus, sait à quoi s'attendre à partir de l'objet, qu'il met tout en IInterface, mais il ne se soucie pas de quel type d'objet il s'agit, mais seulement qu'il respecte le contrat, qui est ce qu'une interface est vraiment.
Par exemple, vous êtes probablement familier avec les calculatrices et ont probablement utilisé un peu en vos jours, mais la plupart du temps, ils sont tous différents. Vous, en revanche, sait comment une calculatrice standard devrait fonctionner, de sorte que vous êtes en mesure de les utiliser tous, même si vous ne pouvez pas utiliser les fonctions spécifiques à chaque calculateur est qu'aucun des autres.
C'est la beauté des interfaces. Vous pouvez écrire un morceau de code, qui sait qu'elle permettra d'obtenir des objets du passé qu'il peut s'attendre à un certain comportement. Il ne s'occupe pas une huée quel type d'objet il s'agit, mais seulement qu'il prend en charge le comportement nécessaire.
Laissez-moi vous donner un exemple concret.
Nous avons un custom-built système de traduction pour windows forms. Ce système de boucles à travers les contrôles sur un formulaire, et traduit le texte dans chacune. Le système sait comment traiter les commandes de base, comme le type de contrôle-qui-a-un-Texte-propriété, et autres trucs de base, mais pour quoi que ce soit de base, il est court.
Maintenant, puisque les contrôles hériter de pré-définies les classes que nous n'avons aucun contrôle sur, nous pourrions faire une des trois choses:
- Renforcer le soutien dans notre système de traduction pour détecter spécifiquement le type de contrôle, il est travailler avec, et de traduire les bits corrects (entretien cauchemar)
- Renforcer le soutien dans les classes de base (ce qui est impossible, puisque tous les contrôles hériter de différents les classes pré-définies)
- L'interface d'ajout de support
Donc nous n'avons nr. 3. Toutes nos commandes en œuvre ILocalizable, qui est une interface qui nous donne qu'une seule méthode, la capacité de traduire "lui-même" par le biais d'un conteneur du texte de la traduction/règles. En tant que tel, le formulaire n'a pas besoin de connaître le type de contrôle qu'il a trouvé, seulement qu'il implémente l'interface, et sait qu'il existe une méthode de là, il peut appeler à localiser le contrôle.