Sadece bütünlük adına, işte ilgili bilgilerin bir beyin dökümü ...
Diğerlerinin belirttiği gibi, stringiçin bir takma addır System.String. Aynı kodu derlerler, bu yüzden yürütme zamanında herhangi bir fark yoktur. Bu C # 'daki takma adlardan sadece biridir. Tam liste:
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
Bunun dışında stringve object, takma adlar değer türleri için tüm vardır. decimalbir değer türüdür, ancak CLR'de ilkel bir tür değildir. Takma adı olmayan tek ilkel tür System.IntPtr.
Spesifikasyonda, değer türü takma adları "basit türler" olarak bilinir. Değişmez değerler her basit türün sabit değerleri için kullanılabilir; başka hiçbir değer türünün gerçek formu yoktur. (Bunu, DateTimedeğişmez değerlere izin veren ve bunun için bir takma adı olan VB ile karşılaştırın .)
Takma adları kullanmanız gereken bir durum vardır : bir enum'un altında yatan türü açıkça belirtirken . Örneğin:
public enum Foo : UInt32 {} // Invalid
public enum Bar : uint {} // Valid
Bu şekilde meselesi Spec tanımlar enum bildirimleri var - kolon sonra parçası olmak zorunda ayrılmaz tipi bir belirteç olan üretim, sbyte, byte, short, ushort, int, uint, long, ulong, char... bir karşıt olarak tip üretim olarak örneğin değişken bildirimleri tarafından kullanılır. Başka bir fark belirtmez.
Son olarak, hangi kullanım söz konusu olduğunda: kişisel olarak uygulama için her yerde takma adları kullanıyorum, ancak herhangi bir API için CLR türü. Uygulama açısından hangisini kullandığınız gerçekten çok önemli değil - ekibiniz arasındaki tutarlılık iyi, ancak kimse ilgilenmeyecek. Öte yandan, bir API'daki bir türe başvurursanız, bunu dilden bağımsız bir şekilde yapmanız gerçekten önemlidir. Denilen bir yöntem ReadInt32açıktır, oysa denilen bir yöntem ReadIntyorum gerektirir. Arayan , örneğin bir inttakma ad tanımlayan bir dil kullanıyor olabilir Int16. .NET framework tasarımcıları, bu deseni izlemiştir iyi örnekler olmak BitConverter, BinaryReaderve Convertsınıflar.
stringa, sözcük C arasında yapı gramer iseSystem.Stringbir türüdür. Herhangi bir spesifikasyonda belirtilen herhangi bir açık farktan bağımsız olarak , yine de bazı belirsizlikler ile karşılanabilecek bu örtülü fark vardır. Dilin kendisi , uygulamanın BCL'de belirli bir sınıf için dikkate almak zorunda kalmayacağı bir şekilde desteklemesi gerekirstring.