107 votes

Existe-t-il une approche raisonnable des paramètres de type "par défaut" dans C # Generics?

Dans les modèles C++, on peut préciser qu'un certain type de paramètre est une valeur par défaut. I. e. sauf s'il est explicitement spécifié, il va utiliser le type T.

Cela peut être fait ou approchée en C#?

Je suis à la recherche de quelque chose comme:

public class MyTemplate<T1, T2=string> {}

De sorte qu'une instance du type qui n'a pas de spécifier de manière explicite T2:

MyTemplate<int> t = new MyTemplate<int>();

Serait essentiellement:

MyTemplate<int, string> t = new MyTemplate<int, string>();

Finalement, je suis à la recherche à un cas dans lequel il y a un modèle qui est assez largement utilisé, mais j'envisage l'expansion avec un autre type de paramètre. J'ai pu de sous-classe, je suppose, mais j'étais curieux de savoir si il y avait d'autres options dans cette veine.

91voto

Reed Copsey Points 315315

Le sous-classement est la meilleure option.

Je sous-classe votre classe générique principale:

class BaseGeneric<T,U>

avec une classe spécifique

class MyGeneric<T> : BaseGeneric<T, string>

Il est ainsi facile de conserver votre logique au même endroit (la classe de base), mais également de fournir les deux options d'utilisation. Selon la classe, très peu de travail supplémentaire est probablement nécessaire pour y arriver.

12voto

Mehrdad Afshari Points 204872

C # ne supporte pas une telle fonctionnalité.

Comme vous l'avez dit, vous pouvez le sous-classer (s'il n'est pas scellé et dupliquer toutes les déclarations du constructeur), mais c'est une chose complètement différente.

3voto

Andrew Hare Points 159332

Malheureusement, C # ne supporte pas ce que vous essayez de faire. Ce serait une fonctionnalité difficile à implémenter, étant donné que le type par défaut d'un paramètre devrait respecter les contraintes génériques et créerait probablement des problèmes lorsque le CLR tenterait de garantir la sécurité du type.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X