2015-06-08 65 views
5

Oto lista aliasów w języku C# (komplementy What is the difference between String and string in C#?):Dlaczego aliasy ciągu i obiektu są pisane małymi literami?

object: System.Object 
string: System.String 
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 

widzę bool przez char będących małymi aliasów, ponieważ są prymitywne typy.

Dlaczego obiekt i ciąg nie są wielkimi literami, ponieważ są to typy złożone? Czy jest to niedopatrzenie twórców, czy też istnieje powód, dla którego muszą być małymi literami? Czy to jest uparte pytanie?

Skończyło się na takich rzeczach, jak string.Format() zamiast String.Format(), które wyglądają dobrze i sprawiają, że myślę, że string jest zmienną.

+3

być bardziej jak C++? użytkownicy mogą nadal używać języka C#, ponieważ byli przyzwyczajeni do tego w poprzednich wersjach językowych? – ps2goat

+0

Możesz * nadal * nadal pisać 'String.Format()', zakładając, że masz 'using System;'. – crashmstr

+1

Również C# zwrócił wiele konwencji i podejść bardzo podobnych do Javy, która ma bardzo podobną strukturę. Może to być trochę mylące, gdy mamy do czynienia z boksowaniem/rozpakowywaniem, ponieważ czasami ludzie mają wrażenie, że ktoś jest w pudełku, a jeden jest odpakowany, ale tak nie jest. – AaronLS

Odpowiedz

4

W języku C# nie ma "typów pierwotnych" i "typów złożonych". Istnieją między innymi classes and structs (typy referencyjne i typy wartości). Oba mogą obejmować metody (na przykład char.IsDigit('a')). Tak więc twoje zastrzeżenia nie są naprawdę ważne. Ale wciąż pozostaje pytanie: dlaczego?

Nie jestem pewien, czy istnieje dobre źródło tego, ale myślę, że aliasy na małe litery są wykonywane w celu dopasowania do other C# keywords, które same są wzorowane na słowach kluczowych C/C++.

11

Ponieważ wszystkie keywords (zastrzeżone identyfikatory) są małe litery.

+0

Chociaż może to nie być "oryginalny" powód (być może @EricLippert) widzi/wie to, myślę, że argument "na rzecz spójności" nie jest najgorszy. (Można jednak zapytać: dlaczego wszystkie słowa kluczowe są małe :-). –

+0

@ Christian.K, ponieważ C# wywodzi wiele ze swojej składni z Javy, która czerpała wiele ze swojej składni z C, z których oba używają słów kluczowych z małej litery. –

+0

@DavidArno: Dzięki, ale wiedziałem. Próbowałem tylko przesunąć kopertę dla tych, którzy tego nie robią :-) –

-1

Odpowiedź jest prosta. Jeśli chcesz użyć go jako klasy, użyj String, jeśli chcesz go użyć jak słowa kluczowego, użyj string. Deweloperzy chcieli, abyśmy czuli się jak w typie prymitywnym. Ponieważ w języku C# nic nie jest prymitywne.

2

Odnośnie ostatniego komentarza:

skończyć z rzeczy, jak string.Format() zamiast String.Format(), które tylko wyglądają funky i sprawia, że ​​myślę ciąg jest zmienna.

z C# 6, staje się kwestią sporną, jak można zrobić:

using static System.String; 

... 
var x = Format(...); 

A idąc dalej, można pozbyć się string.Format całkowicie i zamiast używać $.

+0

@roryap dobrze zauważony, dzięki. –