11
votes

Est-il possible de faire une liste de paramètres de la méthode abstraite avoir une longueur et des types ultrables?

est-il possible de créer une classe de base comme ci-dessous: xxx

de sorte que les classes qui remplacent cela peuvent définir les paramètres requis? En d'autres termes, je veux forcer la méthode à remplacer, mais laissez-la jusqu'à la classe primordiale ce qui est requis ici - donc on pourrait être xxx

alors que l'autre pourrait être xxx

?

merci pour toute aide que vous pouvez donner


2 commentaires

Voulez-vous dire Classe publique DeriveClass: BASECLASS Dans les deux derniers exemples?


Désolé, oui. Je vais changer ça


3 Réponses :


11
votes

absolument pas - cela ne céderait pas la moitié du point d'avoir la méthode abstraite en premier lieu - personne ne pourrait l'appeler, car ils ne sauraient pas la signature de la méthode qui avait été écrite. Le point d'une classe abstraite est qu'un client peut avoir une référence de type basoclass sans se soucier de ce que le type de la mise en œuvre réelle est.

Si la classe de base est capable de prédire à l'avance quels types peuvent être impliqués, une possibilité de rendre la vie plus facile pour que l'appelant est d'avoir la signature la plus générale (typiquement celle avec le plus de paramètres) abstraite et de faire diverses surcharges. qui appelez que général fournit des valeurs par défaut pour les paramètres que le client n'a pas spécifié.


0 commentaires

0
votes

Non, ce n'est pas possible. Une méthode primordiale doit correspondre exactement aux paramètres, c'est la même chose que la mise en œuvre d'une interface. Vous pouvez être intéressé par le Double-Dispatch motif.


2 commentaires

Le lien que vous avez donné semble le faire pour un paramètre de type variable (auquel cas vous pouvez aussi bien utiliser ?) - mais pas pour un nombre variable de paramètres de type variable ... ou que je suis mal interprété?


Vous devriez changer l'exemple pour accueillir un objet parames [] args Liste des paramètres.



1
votes

Il peut être fait si les paramètres étaient tous réglés sur le même type et dans le même numéro, je suppose (je ne sais pas si vous pouvez utiliser des params t [], mais si possible, vous pouvez l'ajuster aussi). Vous pouvez obtenir en utilisant des génériques, comme @ Simonalexander2005 dit xxx

à vous de décider du nombre de paramètres de la classe dérivée utilisera. Mais je ne sais pas si c'est une bonne pratique ...


0 commentaires