En C #, existe-t-il une différence entre utiliser System.Object
dans le code plutôt que simplement object
ou System.String
plutôt que string
et ainsi de suite? Ou est-ce juste une question de style?
Y a-t-il une raison pour laquelle un formulaire est préférable à un autre?
string
est un alias pour global::System.String
. C'est simplement du sucre syntaxique. Les deux sont exactement interchangeables dans presque tous les cas, et il n'y aura aucune différence dans le code compilé.
Personnellement, j'utilise les alias pour les noms de variables, etc., mais j'utilise les noms de type CLR pour les noms dans les API, par exemple:
public int ReadInt32() // Good, language-neutral
public int ReadInt() // Bad, assumes C# meaning of "int"
(Notez que le type de retour n'est pas vraiment un nom - il est codé comme un type dans les métadonnées, il n'y a donc aucune confusion.)
Les seuls endroits que je connaisse où l’un peut être utilisé et l’autre ne peut pas (à ma connaissance) sont:
nameof
interdit l'utilisation d'aliasLe objet type est un alias pour System.Object . Le type object est utilisé et affiché en tant que mot clé. Je pense que cela a quelque chose à voir avec l'héritage, mais ce n'est qu'une farce.
Regardez cette page MSDN pour tous les détails.
Je préfère utiliser les versions minuscules, mais sans raison particulière. Tout simplement parce que la coloration syntaxique est différente sur ces types "de base" et que je n'ai pas à utiliser la touche Majuscule pour taper ...
L'un est un alias à l'autre. C'est bas pour le style.
string
est un alias pour global::System.String
et object
pour global::System.Object
Si vous avez using System;
dans votre classe, String
/string
et Object
/object
sont fonctionnellement identiques et leur utilisation dépend du style.
(EDIT: supprimé citation légèrement trompeuse , selon le commentaire de Jon Skeet)
string
(avec le minuscule "s") est le type de chaîne du langage C # et le type System.String
est l'implémentation de string
dans le framework .NET.
En pratique, il n'y a pas de différence en plus des différences stylistiques.
EDIT: Puisque ce qui précède n'était évidemment pas assez clair, il n'y a pas de différence entre eux, ils sont du même type une fois compilés. J'expliquais la différence sémantique que voit le compilateur (qui n'est qu'un sucre syntaxique, un peu comme la différence entre une boucle while et for).
objet , int , long et bool ont été fournis en tant que roues d'entraînement pour les ingénieurs qui avaient du mal à s'adapter à l'idée que les types de données ne faisaient pas partie intégrante de la langue. C #, contrairement aux langues précédentes, ne limite pas le nombre de types de données que vous pouvez ajouter. La bibliothèque 'System' fournit un kit de démarrage contenant des types utiles tels que System.Int32 , System.Boolean , System.Double , System.DateTime et ainsi de suite, mais les ingénieurs sont encouragés à ajouter les leurs. Parce que Microsoft souhaitait adopter rapidement leur nouveau langage, ils ont fourni des alias lui donnant l’apparence d’un langage ressemblant davantage à du "C", mais ces alias sont une fonctionnalité tout à fait jetable (le langage C # serait tout aussi bon si vous supprimé tous les alias intégrés, probablement mieux).
Bien que StyleCop impose l'utilisation des alias de style C hérités, il s'agit d'un défaut pour un ensemble de règles par ailleurs logique. Pour l'instant, je n'ai entendu aucune justification de cette règle (SA1121) qui ne soit pas basée sur un dogme. Si vous pensez que SA1121 est logique, pourquoi n’existe-t-il aucun type de construction pour datetime ?
Il n'y a pas de différence. Il existe un certain nombre de types, appelés Types de données primitives qui sont traités par le compilateur dans le style que vous avez mentionné.
Le style de dénomination en majuscule est la règle de dénomination ISO. C'est plus général, commun; force les mêmes règles de nommage pour tous les objets de la source sans exceptions, comme le compilateur C #.
A ma connaissance, je sais que c'est un raccourci, il est plus facile d'utiliser string, plutôt que System.string.
Mais attention, il y a une différence entre String et string (c # est sensible à la casse)