Je sais que je ne peux pas surcharger un type de retour (je pense que je le sais).
void F() { } bool F() { return true; }
3 Réponses :
L'autre Lorsqu'une méthode d'interface est mise en œuvre explicitement, elle ne peut pas être appelée sans faire de la référence au type d'interface en premier, ce qui fait des appels sans ambiguïté, et donc avoir plusieurs méthodes avec La même signature est bonne. p> Pour ce faire dans votre code, vous le feriez, par exemple P> ajouter code> est un Méthode d'interface explicitement implémentée .
class MyCollection<T> : ICollection<T> {
public void Add() { ... }
void ICollection<T>.Add() { ... }
}
En disant que l'autre méthode d'ajout est une méthode d'interface explicite est fausse. Explicitement Mise en œuvre de la méthode d'interface i> ne peut apparaître que dans une classe / la structure et le ne peut jamais apparaître sur une interface, car les interfaces ne peuvent pas avoir Mise en œuvre i> en dehors d'une classe / structure. Les deux méthodes que vous mentionnez sont des méthodes d'interface, une sur Iset et l'autre sont sur l'ICollection, et aucun d'entre eux n'est explicitement mis en œuvre la méthode d'interface lorsque nous ne mentionnons pas les classes qui implémentent ces interfaces, que vous n'avez pas. Peut-être que vous pourriez utiliser un meilleur libellé.
@zespri: Vous avez raison. Je n'ai pas regardé la page correctement et je n'ai pas remarqué que c'était une interface et non une classe. Vous devriez publier votre commentaire comme une réponse, car il y a évidemment une différence entre les interfaces et les classes ici.
La première méthode "Ajouter" est en fait Lorsque cela est implémenté dans une classe, au moins l'un des deux Icollection
ajoutez code> Les méthodes devront être explicitement implémentées, c'est-à-dire: p>
Juste curieux, vous dites "implémenté dans une classe" - est-ce opposé à la mise en œuvre dans une structure?
@Gabriel non - implémenté dans aucun type. Cela étant dit, une structure implémentant iset
Les méthodes d'interface peuvent être mises en œuvre explicitement, comme: maintenant la méthode renvoyée void code> n'est accessible que si vous lancez la classe à l'interface: p>
Merci pour les réponses, je choisirai au hasard un pour marquer comme la réponse