Réponses
Trop de publicités?À partir de la JetBrains wiki:
Dans la grande majorité des cas, d'avoir un champ statique dans un type générique est un signe d'une erreur. La raison pour cela est qu'un champ statique dans un type générique va pas être partagées entre les instances des différents fermer des types construits. Cela signifie que pour une classe générique
C<T>
qui a un champ statiqueX
, les valeurs deC<int>.X
etC<string>.X
sont complètement différents, des valeurs indépendantes.Dans les rares cas où vous ne besoin de la 'spécialisés' des champs statiques, se sentir libre pour supprimer l'avertissement.
Si vous avez besoin d'avoir un champ statique partagée entre les instances avec différents arguments génériques, de définir un non-générique de la classe de base pour stocker vos membres statiques, puis définissez votre type générique pour hériter de ce type.
Ce n'est pas une erreur par tous les moyens. C'est une sorte de malentendu de la part des génériques en C#. Le moyen le plus facile de se rappeler ce que les médicaments génériques ne sont les suivants: Les génériques sont des "modèles" pour la création de classes, comme dans beaucoup de classes sont des "modèles" pour créer des objets. (Eh bien, c'est une simplification. Vous pouvez utiliser la méthode de génériques).
De ce point de vue, MyClassRecipe<T>
n'est pas une classe -- c'est une recette, un plan, de ce que votre classe. Une fois que vous remplacez T avec quelque chose de concret, disons int, string, etc., vous obtenez une classe. Il est parfaitement légal d'avoir un membre statique (champ, une propriété, une méthode) est déclarée dans votre classe nouvellement créée (comme dans toute autre classe) et aucun signe de l'erreur ici.
Il serait un peu suspect, à première vue, si vous déclarez static MyStaticProperty<T> Property { get; set; }
dans votre classe, plan, mais ce qui est légal aussi. Seulement votre propriété pourrait être paramétrée, ou basé sur un modèle, aussi bien.
Pas étonnant en VB statique sont appelés shared
. Dans ce cas toutefois, vous devez être conscient que ces "partagé" les membres sont partagés entre la classe de cas, et non entre les différentes classes produites par la substitution d' <T>
avec quelque chose d'autre.