c#: différence entre “le Système de.Objet” et “objet”
En C#, il n'existe aucune différence entre l'utilisation de System.Object
dans le code plutôt que de simplement object
, ou System.String
plutôt que string
et ainsi de suite? Ou est-ce simplement une question de style?
Pourquoi est-ce qu'un formulaire est à préférer à l'autre?
- Voici comment je fais: j'utilise des int ou chaîne dans le contexte d'une primitive variable (comme int x = 0) et l'utilisation Int32 et String etc dans le contexte de classes (comme Int32.D'analyser ou de Chaîne.Vide) - ne fait aucune différence si, à la fin il sera compilé pour le même type CLR.
- pourquoi ne pas vous publiez une réponse?
- C'est une question semblable à un- stackoverflow.com/questions/981434/...
Vous devez vous connecter pour publier un commentaire.
string
est un alias pourglobal::System.String
. C'est tout simplement de sucre syntaxique. Les deux sont exactement interchangeables dans presque tous les cas, et il n'y aura pas de différence dans le code compilé.Personnellement, j'utilise les alias pour les noms de variables, etc, mais je utiliser le type CLR noms de noms de l'Api, par exemple:
(À noter que le type de retour n'est pas vraiment un nom - il est encodé comme un type dans les métadonnées, donc il n'y a pas de confusion.)
Les seuls endroits que je connaisse où l'on peut être utilisé et que les autres ne peuvent pas (que je sache) sont:
nameof
interdit l'utilisation d'aliasnameof
question, ce qui permetObject
,String
, etc, mais PAS de leur C# synonimous commeobject
,string
, etc.La objet type est un alias pour Système.Objet. Le objet type est utilisé et affiché en tant que mot clé. Je pense qu'il a quelque chose à voir avec les anciens, mais c'est juste une hypothèse au hasard.
Jetez un oeil à cette MSDN page pour tous les détails.
Je préfère l'utilisation de la lowercase versions, mais pas pour des raisons spéciales. Tout simplement parce que la syntaxe est différente sur ces "de base" types et je n'ai pas à utiliser la touche maj enfoncée lors de la saisie...
Est un alias de l'autre. De son style.
string
est un alias pourglobal::System.String
, etobject
pourglobal::System.Object
Que vous avez
using System;
dans votre classe,String
/string
etObject
/object
sont fonctionnellement identiques et d'utilisation est une affaire de style.(EDIT: supprimé un peu trompeur devis, comme par Jon Skeet commentaire)
string
(avec les minuscules "s") est le type chaîne de caractères du langage C# et le typeSystem.String
est la mise en œuvre destring
dans le .NET framework.Dans la pratique, il n'y a pas de différence en dehors de stylistique ceux.
EDIT: Depuis la au-dessus de toute évidence n'était pas assez clair, il n'y a pas de différence entre eux, ils sont du même type, une fois compilé. J'ai d'expliquer la différence sémantique que le compilateur voit (qui est juste à sucre syntaxique, un peu comme la différence entre un moment et pour la boucle).
Il n'y a pas de différence. Il y a un certain nombre de types, appelés Les Types De Données Primitifs qui sont taraudés par le compilateur dans le style que vous avez mentionné.
Capitalisés style de nommage ISO est la règle de nommage. C'est plus général de la commune; les forces les mêmes règles de nommage pour tous les objets de la source, sans exceptions, tel compilateur C# a.
Que, à ma connaissance, je sais que c'est un raccourci, il est plus facile d'utiliser des chaînes de caractères, plutôt que de Système.chaîne de caractères.
Mais attention il y a une différence entre la Chaîne et de la chaîne (c# est sensible à la casse)
objet, int, long et bool ont été des roues de formation pour les ingénieurs qui avaient de la difficulté à s'adapter à l'idée que les types de données n'ont pas été une partie fixe de la langue. C#, à la différence des langues qui s'est passé avant, n'a pas de limite sur le nombre de types de données que vous pouvez ajouter. Le "Système" de la bibliothèque fournit un kit de démarrage comprenant utile de types de Système.Int32, Système.Boolean, Système.Double, Système.DateTime et ainsi de suite, mais les ingénieurs sont invités à ajouter leur propre. Parce que Microsoft était intéressé à l'adoption rapide de leur nouvelle langue, ils ont fourni des alias qui fait apparaître comme si la langue était plus "C", mais ces alias sont entièrement jetable fonctionnalité (C# serait tout aussi bien de la langue si vous avez supprimé tous les construire-dans alias, probablement mieux).
Tout StyleCop impose à l'utilisation de l'héritage de style C alias, c'est un défaut sur une autre logique, un ensemble de règles. Pour l'instant, je n'ai pas entendu une seule justification de cette règle (SA1121) qui n'était pas basée sur le dogme. Si vous pensez que SA1121 est logique, alors pourquoi n'est-il pas type de bâtiment pour datetime?