Question

Les types C # sont-ils sécurisés?

Si non, quelles sont les implications?

Était-ce utile?

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.

Oui, ils le sont .

  

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

  1. Vous ne pouvez pas convertir implicitement du type sous-jacent en enum réel
  2. 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.
  3. 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 .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top