c #: différence entre «System.Object» et «object»

En C #, y a-t-il une différence entre utiliser System.Object dans le code plutôt que simplement object ou System.Ssortingng plutôt que ssortingng et ainsi de suite? Ou est-ce juste une question de style?

Y a-t-il une raison pour laquelle une forme est préférable à l’autre?

ssortingng est un alias pour global::System.Ssortingng . C’est simplement du 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, 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 encodé en tant que type dans les métadonnées, il n’y a donc pas de confusion là-bas.)

Les seuls endroits que je connaisse où l’on peut utiliser l’autre et l’autre ne peut pas (à ma connaissance) sont:

  • nameof interdit l’utilisation d’alias
  • Lorsque vous spécifiez un type sous-jacent de base, seuls les alias peuvent être utilisés

Le type d’ object est un alias pour System.Object . Le type d’ object est utilisé et affiché en tant que mot clé. Je pense que cela a quelque chose à voir avec l’inheritance, mais c’est une conjecture sauvage.

Consultez cette page MSDN pour tous les détails.

Je préfère l’utilisation des versions en minuscules, mais sans aucune raison particulière. Juste parce que la coloration syntaxique est différente sur ces types “de base” et que je n’ai pas besoin d’utiliser la touche shift lors de la frappe …

L’un est un alias de l’autre. C’est du style.

ssortingng est un alias pour global::System.Ssortingng et object pour global::System.Object

En vous assurant d’ using System; Dans votre classe, Ssortingng / ssortingng et Object / object sont fonctionnellement identiques et leur utilisation est une question de style.

(EDIT: suppression de la citation légèrement trompeuse , selon le commentaire de Jon Skeet)

Il n’y a pas de différence. Il existe un certain nombre de types, appelés types de données primitifs, qui sont traités par le compilateur dans le style que vous avez mentionné.

Le style de nommage en majuscule est la règle de dénomination ISO. C’est plus général, commun; oblige les mêmes règles de nommage pour tous les objects de la source sans exceptions, comme le compilateur C #.

À ma connaissance, je sais que c’est un raccourci, il est plus facile d’utiliser des chaînes plutôt que System.ssortingng.

Mais attention, il y a une différence entre Ssortingng et ssortingng (c # est sensible à la casse)

ssortingng (avec la minuscule “s”) est le type de chaîne du langage C # et le type System.Ssortingng est l’implémentation de ssortingng dans le framework .NET.

En pratique, il n’y a pas de différence en dehors des styles.

EDIT: Comme 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 le compilateur voit (qui est juste du sucre syntaxique, tout comme la différence entre un boucle while et for).

object , int , long et bool ont été fournis comme des roues d’entraînement pour les ingénieurs qui avaient du mal à s’adapter à l’idée que les types de données n’étaient pas une partie fixe du langage. Contrairement aux langages précédents, C # ne limite pas le nombre de types de données que vous pouvez append. La bibliothèque ‘System’ fournit un kit de démarrage comprenant des types utiles tels que System.Int32 , System.Boolean , System.Double , System.DateTime , etc., mais les ingénieurs sont invités à append les leurs. Microsoft souhaitant une adoption rapide de son nouveau langage, ils ont fourni des alias qui lui donnaient l’impression que le langage était plus “C”, mais ces alias sont une fonctionnalité totalement jetable (C # serait aussi bien un langage 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 sur un ensemble de règles par ailleurs logique. Pour l’instant, je n’ai pas entendu une seule justification pour cette règle (SA1121) qui ne reposait pas sur un dogme. Si vous pensez que SA1121 est logique, alors pourquoi n’y a-t-il pas de type de compilation pour datetime ?