Je ne peux pas savoir la méthode d'addition de la liste de surcharge? Je reçois l'erreur suivante: p> 1) Type paramètre 'T' a le même nom que le nom Paramètre de type de type externe 'collectionSExample.listdemo p> 2)' collectionSExample.listdemo.add (t) ': pas de méthode appropriée trouvée pour remplacer p> p>
6 Réponses :
Le code correct est le suivant:
class ListDemo<T>:List<T> { public new void Add(T value) { base.Add(value); } }
Vous êtes correct, ce code compilera. Mais parce que list.add () code> n'est pas déclaré comme Virtual, si vous utilisez ce
listdemo code> classe dans le code qui attend un code
code>, le remplacement
Ajouter () Code> La méthode ne sera pas appelée.
Cela mettra en garde. Vous devriez utiliser de nouveaux, pas remplacer, mais cela ne va pas faire ce que vous attendez ...
-1 - Ce n'est pas correct. La liste
-1: masquant ajouter (t) code> est un moyen sûr d'introduire des bogues désagréables dans votre application. Le code modifiera réellement les comportements basés sur la question de savoir si elle est détenue dans une liste
Liste
listdemo
@ 280Z28, je suis d'accord, mais c'est la bonne réponse à la question. Je préférerais également une autre approche.
au lieu du sous-classement de la liste
list
ilist
liste
Collection
Liste
résultant de la liste
résultant de la liste n'est pas inutile si c'est la classe qui vous donne ce dont vous avez besoin. Et tout ce que vous voulez faire est d'ajouter quelques méthodes, telles que FindCar (voiture Dodge). Code> p>
Cela a fonctionné pour moi (basé sur le commentaire de Sam Harwell):
public class ListDemo<T> : Collection<T> { protected override void InsertItem(int index, T item) { // Your add condition ... if (!this.Any(x => ...)) base.InsertItem(index, item); } }
Si vous souhaitez une collection dans laquelle vous voudriez remplacer votre ajout / insertion ou indexer, vous pouvez créer votre propre collection qui hériterait de:
InsertItem(); SetItem();
Cela signifie que je n'ai pas besoin de changer la façon dont j'utilise la méthode ajouter () code> dans l'ensemble du projet, non?
Pourquoi êtes-vous sous-classement
Liste code> au lieu de simplement implémenter
ilist code> (et en favorisant la composition au lieu de héritage)?
En outre, dupliqué exact: Stackoverflow.com/Questtions/580202/...
@ Daniel Pryden .Merci .Je suis débutant. apprendre de vous des gens.
@Daniel: Combien de fois mettez-vous ré-implémenter l'interface
IList code> dans vos projets?
system.collections.objectmodel.generic.collection code> est presque toujours meilleur choix si tout ce que vous voulez faire est de remplacer les méthodes telles que
Ajouter code> ou
supprimer code> d'une liste.