Question
Les types C # sont-ils sécurisés?
Si non, quelles sont les implications?
La solution
Pour donner une réponse légèrement différente ... bien que les valeurs soient sécurisées du point de vue du casting, elles ne sont pas cochées une fois qu'elles ont été exprimées - c.-à-d.
enum Foo { A = 1, B = 2, C = 3 }
static void Main()
{
Foo foo = (Foo)500; // works fine
Console.WriteLine(foo); // also fine - shows 500
}
Pour cette raison, vous devez vérifier les valeurs - par exemple avec un default
dans un commutateur
qui lève une exception.
Vous pouvez également vérifier les (pour des valeurs autres que [Indicateurs]
) via:
bool isValid = Enum.IsDefined(typeof(Foo), foo);
Autres conseils
Oui, ils le sont.
Ce qui suit provient de http://www.csharp-station.com/Tutorials /Lesson17.aspx
Les énumérations sont des constantes fortement typées. Ce sont essentiellement des types uniques qui vous permettent d’attribuer des noms symboliques à des valeurs intégrales. Dans la tradition C #, ils sont fortement typés, ce qui signifie qu’une énumération d’un type ne peut pas être implicitement affectée à une énumération d’un autre type même si la valeur sous-jacente de leurs membres est la même. Dans le même ordre d'idées, les types entiers et les énumérations ne sont pas implicitement interchangeables. Toutes les assignations entre différents types enum et types intégraux nécessitent une conversion explicite.
Pour ceux qui suggèrent d’utiliser Enum.IsDefined pour valider les arguments, ne le faites pas! Per Brad Abrams (extrait du Lignes directrices sur la conception de la structure mise à jour sur la conception Enum ):
Enum.IsDefined () pose vraiment deux problèmes. Premièrement, il charge la réflexion et une série de métadonnées de type froid, ce qui en fait un appel trompeusement coûteux. Deuxièmement, comme le dit la note, il existe un problème de version.
Les énumérations sont des constantes fortement typées. Ce sont essentiellement des types uniques qui vous permet d'attribuer des noms symboliques à valeurs intégrales. Dans la tradition C #, ils sont fortement typés, ce qui signifie que une énumération d'un type peut ne pas être implicitement assigné à une énumération de un autre type même si le la valeur sous-jacente de leurs membres sont le même. Sûr les mêmes lignes, types et enums intégraux ne sont pas implicitement interchangable. Tout missions entre différentes énumérations types et types intégrales nécessitent un distribution explicite.
Oui.
C #: types enum:
- Énumération de type nommé des valeurs nommées.
- Empêche les erreurs de programmation
-L'utilisateur peut contrôler le type sous-jacent (par défaut, int)
-Peut également contrôler les valeurs sous-jacentes
Techniquement non, vous pouvez représenter un Enum en tant que valeur de base (int, long, etc.). Toutefois, si vous vous assurez que vous utilisez uniquement l'énum avec les noms fournis, vous recevrez des erreurs de compilation si vous modifiez le nom d'une valeur énumérée sans mettre à jour ses références. À cet égard, oui, il est de type sûr.
Je suis en retard à la fête ici, mais je voulais lancer un petit quelque chose en plus ... Une mise à jour de la . Guide de conception du framework .NET de Krzysztof Cwalina. En plus de l'excellent conseil ci-dessus sur la vérification permettant de s'assurer qu'une valeur valide est transmise à votre enums, cela fournit d'autres conseils et astuces sur la façon de les utiliser efficacement, un tas de pièges (en particulier les énumérations Flags
) , etc.
oui, ils sont fortement typés en sécurité u ne peut pas ne pas convertir impilcit les variables constantes enum en valeur entière u hv 2 fait expilcitly dat par exemple enum days { Soleil, lun } int e = (int) days.sun; console.writeline (e);
Les énumérations C # sont de type sûr, ce qui signifie
- Vous ne pouvez pas convertir implicitement du type sous-jacent en enum réel
- De même, vous ne pouvez pas attribuer la valeur d'un enum à un autre enum, même si les types sous-jacents des deux enum sont identiques. Une diffusion explicite est toujours requise.
- Les énumérations rendent votre code plus lisible et plus facile à gérer.
Je suis tombé sur un excellent tutoriel vidéo sur les énums expliquant leur nature sans danger. Découvrez ici et il .