Je dois souvent implémenter certaines interfaces telles que IEnumerable<T>
dans mon code.Comment implémenter une interface qui nécessite des noms de membre en double?
A chaque fois, la mise en œuvre automatiquement, je rencontre ce qui suit:
public IEnumerator<T> GetEnumerator() {
// Code here...
}
public IEnumerator GetEnumerator1() {
// Code here...
}
Bien que je dois mettre en œuvre les deux GetEnumerator() méthodes, ils impossiblement peuvent avoir le même nom, même si nous comprenons qu'ils font la même chose, en quelque sorte. Le compilateur ne peut pas les traiter comme l'un étant la surcharge de l'autre, car seul le type de retour diffère. Dans ce cas, je parviens à définir l'accesseur GetEnumerator1()
sur private
. De cette façon, le compilateur ne se plaint pas de ne pas implémenter le membre d'interface, et je jette simplement un NotImplementedException
dans le corps de la méthode.
Cependant, je me demande si c'est une bonne pratique, ou si je vais procéder différemment, comme peut-être un alias de méthode ou quelque chose comme ça.
Quelle est la meilleure approche en mettant en œuvre une interface telle que
IEnumerable<T>
qui nécessite la mise en œuvre de deux méthodes différentes avec le même nom?
EDIT # 1
Est-ce que VB.NET réagit différemment de C# en mettant en œuvre des interfaces, car en VB.NET il est explicitement mis en œuvre, forçant ainsi le
GetEnumerator1()
. Voici le code:
Public Function GetEnumerator() As System.Collections.Generic.IEnumerator(Of T) Implements System.Collections.Generic.IEnumerable(Of T).GetEnumerator
// Code here...
End Function
Public Function GetEnumerator1() As System.Collections.Generic.IEnumerator Implements System.Collections.Generic.IEnumerable.GetEnumerator
// Code here...
End Function
Les deux méthodes GetEnumerator()
sont explicitement mises en œuvre, et la compilation leur refuser d'avoir le même nom. Pourquoi?
Cela ne compilera pas. – SLaks
Eh bien, cela n'a pas vraiment d'importance ici car c'est un exemple pour énoncer ce que j'essaie de dire. S'il vous plaît voir ma question éditer. =) –
vos déclarations de méthode VB implémentent explicitement des interfaces * différentes * (versions génériques et non génériques de 'IEnumerator'): dites-vous que le compilateur ne les autorise pas? –