Quelle est la différence entre Ssortingng et ssortingng en C #?

Exemple ( notez le cas ):

ssortingng s = "Hello world!"; Ssortingng s = "Hello world!"; 

Quelles sont les lignes direcsortingces pour l’utilisation de chacun? Et quelles sont les différences ?

ssortingng est un alias en C # pour System.Ssortingng .
Donc techniquement, il n’y a pas de différence. C’est comme int contre System.Int32 .

En ce qui concerne les lignes direcsortingces, il est généralement recommandé d’utiliser des ssortingng chaque fois que vous parlez d’un object.

par exemple

 ssortingng place = "world"; 

De même, je pense qu’il est généralement recommandé d’utiliser Ssortingng si vous devez vous référer spécifiquement à la classe.

par exemple

 ssortingng greet = Ssortingng.Format("Hello {0}!", place); 

C’est le style que Microsoft a tendance à utiliser dans ses exemples .

Il semble que le guidage dans cette zone ait changé, car StyleCop impose désormais l’utilisation des alias spécifiques à C #.

Pour des raisons d’exhaustivité, voici une page d’informations sur le cerveau …

Comme d’autres l’ont noté, ssortingng est un alias pour System.Ssortingng . Ils comstacknt dans le même code, donc au moment de l’exécution, il n’y a aucune différence. Ceci est juste l’un des alias en C #. La liste complète est la suivante:

 object: System.Object ssortingng: System.Ssortingng bool: System.Boolean byte: System.Byte sbyte: System.SByte short: System.Int16 ushort: System.UInt16 int: System.Int32 uint: System.UInt32 long: System.Int64 ulong: System.UInt64 float: System.Single double: System.Double decimal: System.Decimal char: System.Char 

Outre les ssortingng et les object , les alias sont tous des types de valeur. decimal est un type de valeur, mais pas un type primitif dans le CLR. Le seul type primitif qui n’a pas d’alias est System.IntPtr .

Dans la spécification, les alias de type valeur sont appelés “types simples”. Les littéraux peuvent être utilisés pour des valeurs constantes de chaque type simple; aucun autre type de valeur ne dispose de formes littérales. (Comparez cela avec VB, qui autorise les littéraux DateTime , et possède un alias pour cela.)

Il y a une circonstance dans laquelle vous devez utiliser les alias: lorsque vous spécifiez explicitement le type sous-jacent d’un enum. Par exemple:

 public enum Foo : UInt32 {} // Invalid public enum Bar : uint {} // Valid 

C’est juste une question de la façon dont la spécification définit les déclarations enum – la partie après les deux points doit être la production de type intégral , qui est un jeton de sbyte , byte , short , ushort , int , uint , long , ulong , char . .. par opposition à une production de type utilisée par exemple par les déclarations de variables. Cela n’indique aucune autre différence.

Enfin, quand il s’agit d’utiliser: personnellement, j’utilise les alias partout pour l’implémentation, mais le type CLR pour toutes les API. Ce que vous utilisez en termes de mise en œuvre n’a pas vraiment d’importance – la cohérence de votre équipe est agréable, mais personne d’autre ne s’en souciera. D’un autre côté, il est vraiment important que si vous faites référence à un type dans une API, vous le faites de manière neutre. Une méthode appelée ReadInt32 est sans ambiguïté, alors qu’une méthode appelée ReadInt nécessite une interprétation. L’appelant pourrait utiliser un langage qui définit un alias int pour Int16 , par exemple. Les concepteurs du framework .NET ont suivi ce modèle, les bons exemples étant dans les BitConverter , BinaryReader et Convert .

Ssortingng signifie System.Ssortingng et il s’agit d’un type .NET Framework. ssortingng est un alias dans le langage C # pour System.Ssortingng . Les deux sont compilés dans System.Ssortingng dans IL (Intermediate Language), donc il n’y a pas de différence. Choisissez ce que vous aimez et utilisez-le. Si vous codez en C #, je préférerais que ssortingng est un alias de type C # et bien connu des programmeurs C #.

Je peux dire la même chose à propos de ( int , System.Int32 ) etc.

La meilleure réponse que j’ai jamais entendu à propos de l’utilisation des alias de type fournis dans C # provient de Jeffrey Richter dans son livre CLR Via C # . Voici ses 3 raisons:

  • J’ai vu un certain nombre de développeurs confus, ne sachant pas s’il fallait utiliser ssortingng ou Ssortingng dans leur code. Parce que dans C # la chaîne (un mot-clé) correspond exactement à System.Ssortingng (un type FCL), il n’y a pas de différence et chacun peut être utilisé.
  • En C #, les mappages longs à System.Int64 , mais dans un langage de programmation différent, peuvent être mappés sur Int16 ou Int32 . En fait, C ++ / CLI traite en fait long comme un Int32 . Quelqu’un qui lit le code source dans une langue peut facilement interpréter l’intention du code s’il était habitué à programmer dans un autre langage de programmation. En fait, la plupart des langages ne traitent même pas long comme un mot clé et ne comstackront pas le code qui l’utilise.
  • Le FCL a beaucoup de méthodes qui ont des noms de types dans leurs noms de méthodes. Par exemple, le type BinaryReader propose des méthodes telles que ReadBoolean , ReadInt32 , ReadSingle , etc., et le type System.Convert propose des méthodes telles que ToBoolean , ToInt32 , ToSingle , etc. Bien qu’il soit légal d’écrire le code suivant, la ligne avec float ne me semble pas naturelle et il n’est pas évident que la ligne soit correcte:
 BinaryReader br = new BinaryReader(...); float val = br.ReadSingle(); // OK, but feels unnatural Single val = br.ReadSingle(); // OK and feels good 

Alors voilà Je pense que ce sont tous de très bons points. Cependant, je ne trouve pas que j’utilise les conseils de Jeffrey dans mon propre code. Peut-être que je suis trop coincé dans mon monde C # mais je finis par essayer de faire ressembler mon code au code du framework.

ssortingng est un mot réservé, mais Ssortingng est juste un nom de classe. Cela signifie que cette ssortingng ne peut pas être utilisée comme nom de variable par elle-même.

Si pour une raison quelconque vous vouliez une variable appelée ssortingng , vous ne verriez que la première de ces compilations:

 SsortingngBuilder Ssortingng = new SsortingngBuilder(); // comstacks SsortingngBuilder ssortingng = new SsortingngBuilder(); // doesn't comstack 

Si vous voulez vraiment un nom de variable appelé ssortingng, vous pouvez utiliser @ comme préfixe:

 SsortingngBuilder @ssortingng = new SsortingngBuilder(); 

Une autre différence critique: Stack Overflow les met en évidence différemment.

Il y a une différence : vous ne pouvez pas utiliser Ssortingng sans using System; préalablement.

C’est couvert ci-dessus; Cependant, vous ne pouvez pas utiliser de ssortingng en reflection; vous devez utiliser Ssortingng .

System.Ssortingng est la classe de chaîne .NET – dans la ssortingng C # est un alias pour System.Ssortingng – ils sont donc identiques.

En ce qui concerne les lignes direcsortingces, je ne m’embourberais pas trop et je me contenterais d’utiliser ce que vous voudriez: il y a des choses plus importantes dans la vie et le code sera le même de toute façon.

Si vous vous trouvez en train de construire des systèmes où il est nécessaire de spécifier la taille des entiers que vous utilisez et qui ont donc tendance à utiliser Int16 , Int32 , UInt16 , UInt32 etc., il peut sembler plus naturel d’utiliser Ssortingng – .net langues cela pourrait rendre les choses plus compréhensibles – sinon j’utiliserais ssortingng et int.

Je préfère les types .NET majuscules (plutôt que les alias) pour des raisons de formatage. Les types .NET sont colorés de la même manière que les autres types d’object (les types de valeur sont des objects corrects, après tout).

Les mots clés conditionnels et de contrôle (comme if , switch et return ) sont en minuscules et colorés en bleu foncé (par défaut). Et je préférerais que le désaccord ne soit pas utilisé et formaté.

Considérer:

 Ssortingng someSsortingng; ssortingng anotherSsortingng; 

ssortingng et Ssortingng sont identiques à tous égards (sauf le “S” majuscule). Il n’y a pas d’implication de performance de toute façon.

La ssortingng minuscule est préférée dans la plupart des projets en raison de la coloration syntaxique

C # est un langage utilisé avec le CLR.

ssortingng est un type en C #.

System.Ssortingng est un type dans le CLR.

Lorsque vous utilisez C # avec la ssortingng CLR, celle-ci sera mappée sur System.Ssortingng .

Théoriquement, vous pouvez implémenter un compilateur C # qui génère le bytecode Java. Une implémentation judicieuse de ce compilateur serait probablement mapper ssortingng à java.lang.Ssortingng pour interagir avec la bibliothèque d’exécution Java.

Cette vidéo YouTube montre comment ils diffèrent.

Mais maintenant, pour une longue réponse textuelle.

Lorsque nous parlons de .NET il y a deux choses différentes: le .NET et les langages ( C# , VB.NET etc.) qui utilisent ce framework.

entrer la description de l'image ici

System.Ssortingng ” aka “Ssortingng” (majuscule “S”) est un type de données .NET Framework alors que “ssortingng” est un type de données C# .

entrer la description de l'image ici

En bref “Ssortingng” est un alias (la même chose appelée avec des noms différents) de “ssortingng”. Donc, techniquement, les deux déclarations de code ci-dessous donneront la même sortie.

 Ssortingng s = "I am Ssortingng"; 

ou

 ssortingng s = "I am Ssortingng"; 

De la même manière, il existe des alias pour d’autres types de données c #, comme indiqué ci-dessous: –

object: System.Object , chaîne: System.Ssortingng , bool: System.Boolean , octet: System.Byte , sbyte: System.SByte , short: System.Int16 et ainsi de suite

Maintenant, la question à un million de dollars du sharepoint vue du programmeur Alors, quand utiliser “Ssortingng” et “ssortingng”?

La première chose à éviter pour éviter la confusion est d’utiliser l’un d’entre eux de manière cohérente. Mais du sharepoint vue des meilleures pratiques, lorsque vous faites une déclaration de variable, il est bon d’utiliser “ssortingng” (petit “s”) et lorsque vous l’utilisez comme nom de classe, “Ssortingng” (majuscule “S”) est préférable.

Dans le code ci-dessous, le côté gauche est une déclaration de variable et il a déclaré en utilisant “ssortingng”. Sur le côté droit, nous appelons une méthode afin que “Ssortingng” soit plus sensible.

 ssortingng s = Ssortingng.ToUpper() ; 

ssortingng est juste un alias pour System.Ssortingng . Le compilateur les traitera de manière identique.

La seule différence pratique est la coloration syntaxique que vous mentionnez et que vous devez écrire en using System si vous utilisez Ssortingng .

La ssortingng minuscule est un alias pour System.Ssortingng . Ils sont les mêmes en C# .

On se demande si vous devez utiliser les types System ( System.Int32 , System.Ssortingng , etc.) ou les C# aliases ( int , ssortingng , etc.). Personnellement, je pense que vous devriez utiliser les C# aliases , mais ce n’est que ma préférence personnelle.

Les deux sont identiques. Mais du sharepoint vue des directives de codage, il est préférable d’utiliser ssortingng plutôt que Ssortingng . C’est ce que les développeurs utilisent généralement. Par exemple, au lieu d’utiliser Int32 nous utilisons int comme int est un alias pour Int32

FYI “La chaîne de mots-clés est simplement un alias pour la classe prédéfinie System.Ssortingng .” – Spécification du langage C # 4.2.3 http://msdn2.microsoft.com/En-US/library/aa691153.aspx

Comme les autres le disent, ils sont les mêmes. Les règles StyleCop, par défaut, vous obligeront à utiliser ssortingng comme une meilleure pratique de style de code C #, sauf lors du référencement de fonctions statiques System.Ssortingng , telles que Ssortingng.Format , Ssortingng.Join , Ssortingng.Concat , etc …

L’utilisation de types de système facilite le portage entre C # et VB.Net, si vous êtes dans ce genre de chose.

Contrairement à ce qui semble être une pratique courante chez les autres programmeurs, je préfère Ssortingng à la ssortingng , juste pour souligner le fait que Ssortingng est un type de référence, comme Jon Skeet l’a mentionné.

ssortingng est un alias (ou un raccourci) de System.Ssortingng . Cela signifie que, en tapant ssortingng nous voulions dire System.Ssortingng . Vous pouvez en lire plus dans think link: ‘ssortingng’ est un alias / raccourci de System.Ssortingng.

Ssortingng ( System.Ssortingng ) est une classe de la bibliothèque de classes de base. ssortingng (minuscule) est un travail réservé dans C # qui est un alias pour System.Ssortingng. Int32 vs int est une situation similaire à Boolean vs. bool . Ces mots-clés spécifiques au langage C # vous permettent de déclarer des primitives dans un style similaire à C.

Ssortingng n’est pas un mot-clé et peut être utilisé comme identifiant alors que ssortingng est un mot-clé et ne peut pas être utilisé comme identifiant. Et, du sharepoint vue fonctionnel, les deux sont identiques.

En retard à la fête: j’utilise les types de CLR 100% du temps (enfin, sauf si je suis obligé d’utiliser le type C #, mais je ne me souviens plus de la dernière fois).

J’ai commencé à le faire il y a plusieurs années, conformément aux livres de CLR de Ritchie. Il était logique pour moi que tous les langages CLR soient finalement capables de prendre en charge l’ensemble des types de CLR. L’utilisation des types de CLR vous a donc fourni un code plus clair et éventuellement plus “réutilisable”.

Maintenant que je le fais depuis des années, c’est une habitude et j’aime la coloration que VS montre pour les types CLR.

Le seul véritable inconvénient est que l’auto-complétion utilise le type C #, donc je finis par retaper les types générés automatiquement pour spécifier le type CLR à la place.

Aussi, maintenant, quand je vois “int” ou “ssortingng”, cela me semble vraiment faux, comme si je regardais le code C des années 1970.

Je voudrais juste append ceci à la réponse de lfousts, du livre de Ritchers:

La spécification du langage C # stipule que «l’utilisation du mot-clé est favorisée par rapport à l’utilisation du nom complet du type de système.» Je ne suis pas d’accord avec la spécification du langage. Je préfère utiliser les noms de type FCL et éviter complètement les noms de type primitifs. En fait, je souhaite que les compilateurs n’offrent même pas les noms de type primitifs et obligent les développeurs à utiliser les noms de type FCL à la place. Voici mes raisons:

Je n’ai pas eu son avis avant de lire le paragraphe complet.

C’est vraiment une question de convention. “ssortingng” ressemble plus à un style C / C ++. La convention générale est d’utiliser les raccourcis fournis par votre langue (int / Int pour Int32). Cela vaut également pour “object” et “décimal”.

Théoriquement, cela pourrait aider à porter le code dans une future norme 64 bits dans laquelle “int” pourrait signifier Int64, mais ce n’est pas le cas, et je m’attendrais à ce que tout assistant de mise à niveau fais attention.

Il n’y a pas de différence.

La ssortingng mots-clés C # correspond au type .NET System.Ssortingng – c’est un alias qui respecte les conventions de dénomination du langage.

De même, int correspond à System.Int32 .

New answer after 6 years and 5 months (procrastination).

While ssortingng is a reserved C# keyword that always has a fixed meaning, Ssortingng is just an ordinary identifier which could refer to anything. Depending on members of the current type, the current namespace and the applied using directives and their placement, Ssortingng could be a value or a type distinct from global::System.Ssortingng .

I shall provide two examples where using directives will not help .


First, when Ssortingng is a value of the current type (or a local variable):

 class MySequence { public IEnumerable Ssortingng { get; set; } void Example() { var test = Ssortingng.Format("Hello {0}.", DateTime.Today.DayOfWeek); } } 

The above will not comstack because IEnumerable<> does not have a non-static member called Format , and no extension methods apply. In the above case, it may still be possible to use Ssortingng in other contexts where a type is the only possibility syntactically. For example Ssortingng local = "Hi mum!"; could be OK (depending on namespace and using directives).

Worse: Saying Ssortingng.Concat(someSequence) will likely (depending on using s) go to the Linq extension method Enumerable.Concat . It will not go to the static method ssortingng.Concat .


Secondly, when Ssortingng is another type , nested inside the current type:

 class MyPiano { protected class Ssortingng { } void Example() { var test1 = Ssortingng.Format("Hello {0}.", DateTime.Today.DayOfWeek); Ssortingng test2 = "Goodbye"; } } 

Neither statement in the Example method comstacks. Here Ssortingng is always a piano ssortingng , MyPiano.Ssortingng . No member ( static or not) Format exists on it (or is inherited from its base class). And the value "Goodbye" cannot be converted into it.

There’s a quote on this issue from Daniel Solis’ book .

All the predefined types are mapped directly to underlying .NET types. The C# type names (ssortingng) are simply aliases for the .NET types (Ssortingng or System.Ssortingng), so using the .NET names works fine syntactically, although this is discouraged. Within a C# program, you should use the C# names rather than the .NET names.

ssortingng is a keyword, and you can’t use ssortingng as an identifier.

Ssortingng is not a keyword, and you can use it as an identifier:

Exemple

 ssortingng Ssortingng = "I am a ssortingng"; 

The keyword ssortingng is an alias for System.Ssortingng aside from the keyword issue, the two are exactly equivalent.

  typeof(ssortingng) == typeof(Ssortingng) == typeof(System.Ssortingng) 

Yes, that’s no difference between them, just like the bool and Boolean .

There is no difference between the two – ssortingng , however, appears to be the preferred option when considering other developers’ source code.