74 Stimmen

c#: Unterschied zwischen "System.Object" und "object"

Gibt es in C# einen Unterschied zwischen der Verwendung von System.Object im Code statt nur object , oder System.String よりも string und so weiter? Oder ist es nur eine Frage des Stils?

Gibt es einen Grund, warum die eine Form der anderen vorzuziehen ist?

5 Stimmen

Ich mache es folgendermaßen: Ich verwende int oder string im Kontext einer primitiven Variablen (z.B. int x = 0) und verwende Int32 und String usw. im Kontext von Klassen (z.B. Int32.Parse oder String.Empty) - macht aber keinen Unterschied, am Ende wird es zum gleichen CLR-Typ kompiliert.

2 Stimmen

Warum veröffentlichen Sie das nicht als Antwort?

1 Stimmen

Dies ist eine ähnliche Frage wie diese. stackoverflow.com/questions/981434/

73voto

Jon Skeet Punkte 1325502

string ist ein Alias für global::System.String . Das ist einfach nur syntaktischer Zucker. Die beiden sind genau in fast allen Fällen austauschbar, und der kompilierte Code wird keinen Unterschied aufweisen.

Ich persönlich verwende die Aliasnamen 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 kodiert, so dass es hier keine Verwirrung gibt).

Die einzigen Orte, von denen ich weiß, dass der eine verwendet werden kann und der andere nicht (soweit ich weiß), sind:

  • nameof verbietet die Verwendung von Pseudonymen
  • Bei der Angabe eines zugrunde liegenden Enum-Basistyps, sólo die Aliasnamen können verwendet werden

10 Stimmen

Die Bemerkung über die Sprachneutralität von öffentlichen APIs ist in der Tat sehr interessant!

3 Stimmen

Es lohnt sich, dies zu tun, nur um FxCop zum Schweigen zu bringen.

1 Stimmen

Sprachneutralität für öffentliche APIs ist die Grundlage für einen Großteil der .NET-Bibliotheken.

9voto

Sorskoot Punkte 10066

El Objekt Typ ist ein Alias für System.Objekt . Die Objekt Typ verwendet und als Schlüsselwort angezeigt wird. Ich denke, es hat etwas mit dem Erbe zu tun, aber das ist nur eine wilde Vermutung.

Schauen Sie sich dies an MSDN Seite für alle Details.

Ich bevorzuge die klein geschriebenen Versionen, aber aus keinem besonderen Grund. Nur weil die Syntaxhervorhebung bei diesen "einfachen" Typen anders ist und ich beim Tippen nicht die Umschalttaste benutzen muss...

6voto

Johnno Nolan Punkte 28357

Das eine ist ein Alias für das andere. Das ist eine Frage des Stils.

3voto

Colin Pickard Punkte 44501

string ist ein Alias für global::System.String et object para global::System.Object

Vorausgesetzt, Sie haben using System; in Ihrer Klasse, String / string et Object / object sind funktional identisch und die Verwendung ist eine Frage des Stils.

(EDIT: entfernt leicht irreführendes Zitat (gemäß dem Kommentar von Jon Skeet)

3 Stimmen

"String" mit einem Großbuchstaben hat keine Bedeutung für den C#-Compiler oder die C#-Sprache. "String" immer entspricht global::System.String. Ich weiß nicht, woher der ursprüngliche Autor die Vorstellung hat, dass "String" eine besondere Bedeutung hat.

1voto

Matthew Scharley Punkte 121038

string (mit dem Kleinbuchstaben "s") ist der Stringtyp der Sprache C# und der Typ System.String ist die Implementierung von string im .NET-Framework.

In der Praxis gibt es außer stilistischen keinen Unterschied.

EDIT: Da das oben Gesagte offensichtlich nicht klar genug war, gibt es keinen Unterschied zwischen ihnen, sie sind nach der Kompilierung der gleiche Typ. Ich habe den semantischen Unterschied erklärt, den der Compiler sieht (der nur syntaktischer Zucker ist, so wie der Unterschied zwischen einer while- und einer for-Schleife).

0 Stimmen

-Das ist falsch. string und System.String sind völlig austauschbar. string ist einfach ein Alias für System.String

1 Stimmen

Das ist richtig, und ich habe nie gesagt, dass sie unterschiedlich sind. string ist ein Schlüsselwort, das auf System.String verweist. Vielleicht habe ich mich nicht klar ausgedrückt.

1 Stimmen

Eigentlich war ich sehr deutlich: "In der Praxis gibt es keinen Unterschied..."

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X