Sadece bütünlük adına, işte ilgili bilgilerin bir beyin dökümü ...
Diğerlerinin belirttiği gibi, string
iç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 string
ve object
, takma adlar değer türleri için tüm vardır. decimal
bir 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, DateTime
değ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 ReadInt32
açıktır, oysa denilen bir yöntem ReadInt
yorum gerektirir. Arayan , örneğin bir int
takma ad tanımlayan bir dil kullanıyor olabilir Int16
. .NET framework tasarımcıları, bu deseni izlemiştir iyi örnekler olmak BitConverter
, BinaryReader
ve Convert
sınıflar.
string
a, sözcük C arasında yapı gramer iseSystem.String
bir 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
.