Est-il possible de créer constructeur-l'extension de la méthode ? comment?
Est-il possible d'ajouter un constructeur de la méthode d'extension ? Je veux ajouter une Liste< T > constructeur à recevoir un montant d'octets de donnée partiellement rempli tampon (sans les frais de copie seulement les octets et ainsi de suite):
...
public static List<T>(this List<T> l, T[] a, int n)
{
for (int i = 0; i < n; i++)
l.Add(a[i]);
}
...
ainsi que l'utilisation serait:
List<byte> some_list = new List<byte>(my_byte_array,number_of_bytes);
Je l'ai déjà ajouté un AddRange méthode d'extension:
public static void AddRange<T>(this List<T> l, T[] a, int n)
{
for (int i = 0; i < n; i++)
l.Add(a[i]);
}
Je veux le faire en tant que constructeur de trop. Est-il possible ? si oui comment faire ?
Vous devez vous connecter pour publier un commentaire.
Non, mais si vous avez changé votre
AddRange
signature à retourner la liste de l'instance, alors vous pourriez au moins fairequi à mon humble avis est probablement le plus clair de surcharger le constructeur de toute façon.
SWeko la réponse est fondamentalement correcte, bien que l'article qu'il a des liens vers est à propos de l'extension de propriétés plutôt que de l'extension des constructeurs.
Nous avons également fait une conception grossière pour l'extension de constructeurs dans le même temps, comme nous l'avons fait de l'extension des propriétés; ils seraient une belle sucre syntaxique pour le modèle de fabrique. Cependant, ils n'ai jamais dépassé le stade de la conception; la fonction, bien que jolie, n'est pas vraiment nécessaire et de ne pas permettre à tout génial de nouveaux scénarios.
Si vous avez un vraiment génial problème que l'extension des constructeurs permettrait de résoudre, je serais heureux d'entendre plus de détails. Le plus du monde réel de la rétroaction que nous recevons, plus nous serons en mesure d'évaluer les mérites relatifs des centaines de suggestions de fonctionnalités nous avons chaque année.
string
de sorte qu'il pourrait travailler avecdefault(string)
. Soit ça, ou fournir un constructeur par défaut pourstring
.Spec1
etSpec2
hériter de laBase
classe abstraite (tous sont des classes vous ne pouvez pas modifier (assembly compilé par exemple)). En ajoutant un sans paramètre extension constructeur deBase
(ainsi que l'extension des propriétés ou des méthodes), on pouvait fournir une logique d'initialisation pour les deuxSpec1
etSpec2
dans une seule extension de constructeur.default:
clause est frappé dans un switch, j'ai voulu prolonger leInvalidOperationException
constructeur pour créer un bien formaté et message utile. Quelques surcharges de l'exception constructeur (extensions) qui pourrait gérer les chaînes, les énumérations, etc. en fonction des noms de paramètres et de valeurs avec un seul emplacement pour les détails de mise en œuvre plutôt que dans chaquedefault:
clause.readonly
et ne peut être réglé que par un constructeur, et vous voulez être en mesure de les initialiser à partir d'une source de données différente, impliquant un type que l'assemblée, dans laquelle la classe POCO est déclaré ne pas connaître.MyClass<T>
il serait agréable d'être en mesure de contraindreT
justeint
etbool
avec l'utilisation de seulement deux constructeurs. Une prise deint
comme argument, et l'autrebool
.En un mot: non. Jetez un oeil à cette pour quelques explications.
Qu'ils ont été coupés à partir de C# 3 liste des fonctionnalités, alors qu'ils ont été coupés à partir de C# 4 liste des fonctionnalités, et nous ne pouvons qu'espérer qu'ils pourraient faire du C# 5 caractéristiques, mais je ne suis pas très optimiste.
Je sais que c'est une bosse, je voulais simplement faire remarquer que vous pouvez hériter de la classe List et faire quelque chose comme ceci: