Gibt es in C # einen Unterschied zwischen der Verwendung System.Object
in Code und nicht nur object
oder System.String
eher als string
und so weiter? Oder ist es nur eine Frage des Stils?
Gibt es einen Grund, warum eine Form der anderen vorzuziehen ist?
c#
coding-style
Paolo Tedesco
quelle
quelle
Antworten:
string
ist ein Alias fürglobal::System.String
. Es ist einfach syntaktischer Zucker. Die beiden sind in fast allen Fällen genau austauschbar, und es gibt keinen Unterschied im kompilierten Code.Persönlich verwende ich die Aliase für Variablennamen usw., aber ich verwende die CLR-Typnamen für Namen in APIs, zum Beispiel:
public int ReadInt32() // Good, language-neutral public int ReadInt() // Bad, assumes C# meaning of "int"
(Beachten Sie, dass der Rückgabetyp nicht wirklich ein Name ist - er ist in den Metadaten als Typ codiert, sodass dort keine Verwirrung entsteht.)
Die einzigen Orte, an denen ich weiß, wo einer verwendet werden kann und der andere nicht (die mir bekannt sind), sind:
nameof
verbietet die Verwendung von Aliasenquelle
Der Objekttyp ist ein Alias für System.Object . Der Objekttyp wird verwendet und als Schlüsselwort angezeigt. Ich denke, es hat etwas mit Vermächtnis zu tun, aber das ist nur eine wilde Vermutung.
Auf dieser MSDN- Seite finden Sie alle Details.
Ich bevorzuge die Verwendung der Versionen in Kleinbuchstaben, aber ohne besondere Gründe. Nur weil die Syntaxhervorhebung bei diesen "grundlegenden" Typen unterschiedlich ist und ich beim Tippen nicht die Umschalttaste verwenden muss ...
quelle
Einer ist ein Alias für den anderen. Es liegt am Stil.
quelle
string
ist ein Alias fürglobal::System.String
undobject
fürglobal::System.Object
Vorausgesetzt, Sie haben
using System;
in Ihrer KlasseString
/string
undObject
/object
sind funktional identisch und die Verwendung ist eine Frage des Stils.(BEARBEITEN: leicht irreführendes Zitat gemäß Jon Skeets Kommentar entfernt)
quelle
string
(mit dem Kleinbuchstaben "s") ist der Zeichenfolgentyp der C # -Sprache und der TypSystem.String
ist die Implementierungstring
in .NET Framework.In der Praxis gibt es keinen Unterschied zu den stilistischen.
EDIT: Da die oben genannten offensichtlich nicht klar genug waren, gibt es keinen Unterschied zwischen ihnen, sie sind vom gleichen Typ, sobald sie kompiliert wurden. Ich habe den semantischen Unterschied erklärt, den der Compiler sieht (der nur syntaktischer Zucker ist, ähnlich wie der Unterschied zwischen einer Weile und einer for-Schleife).
quelle
Es gibt keinen Unterschied. Es gibt eine Reihe von Typen, die als primitive Datentypen bezeichnet werden und vom Compiler in dem von Ihnen erwähnten Stil bedroht werden.
Der großgeschriebene Benennungsstil ist die ISO-Benennungsregel. Es ist allgemeiner, üblich; Erzwingt ausnahmslos die gleichen Namensregeln für alle Objekte in der Quelle, die ein solcher C # -Compiler hat.
quelle
Meines Wissens nach ist es eine Verknüpfung, es ist einfacher, Zeichenfolgen zu verwenden, als System.string.
Aber seien Sie vorsichtig, es gibt einen Unterschied zwischen String und String (bei c # wird zwischen Groß- und Kleinschreibung unterschieden)
quelle
object , int , long und bool wurden als Stützräder für Ingenieure bereitgestellt , die Schwierigkeiten hatten, sich an die Idee anzupassen, dass die Datentypen kein fester Bestandteil der Sprache waren. C # hat im Gegensatz zu den vorherigen Sprachen keine Begrenzung für die Anzahl der Datentypen, die Sie hinzufügen können. Die ' System' -Bibliothek enthält ein Starter-Kit mit nützlichen Typen wie System.Int32 , System.Boolean , System.Double , System.DateTimeund so weiter, aber Ingenieure werden ermutigt, ihre eigenen hinzuzufügen. Da Microsoft an einer schnellen Einführung ihrer neuen Sprache interessiert war, stellten sie Aliase bereit, die den Anschein erweckten, als wäre die Sprache eher "C" -ähnlich. Diese Aliase sind jedoch eine vollständig verfügbare Funktion (C # wäre eine ebenso gute Sprache, wenn Sie dies tun würden entfernte alle eingebauten Aliase, wahrscheinlich besser).
Während StyleCop die Verwendung der alten Aliase im C-Stil erzwingt, ist dies ein Fehler in einem ansonsten logischen Regelwerk. Bisher habe ich keine einzige Rechtfertigung für diese Regel (SA1121) gehört, die nicht auf einem Dogma basiert. Wenn Sie der Meinung sind, dass SA1121 logisch ist, warum gibt es dann keinen Build-Typ für datetime ?
quelle