Demi kelengkapan, berikut adalah kumpulan informasi terkait ...
Seperti yang telah dicatat orang lain, string
adalah alias untuk System.String
. Mereka mengkompilasi ke kode yang sama, sehingga pada waktu eksekusi tidak ada perbedaan apa pun. Ini hanyalah salah satu dari alias di C #. Daftar lengkapnya adalah:
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
Terlepas dari string
dan object
, alias semua untuk tipe nilai. decimal
adalah tipe nilai, tetapi bukan tipe primitif di CLR. Satu-satunya tipe primitif yang tidak memiliki alias adalah System.IntPtr
.
Dalam spec, alias tipe nilai dikenal sebagai "tipe sederhana". Literal dapat digunakan untuk nilai konstan dari setiap tipe sederhana; tidak ada tipe nilai lain yang memiliki bentuk literal tersedia. (Bandingkan ini dengan VB, yang memungkinkan DateTime
literal, dan juga memiliki alias untuk itu.)
Ada satu keadaan di mana Anda harus menggunakan alias: ketika secara eksplisit menentukan jenis enum yang mendasarinya. Contohnya:
public enum Foo : UInt32 {} // Invalid
public enum Bar : uint {} // Valid
Itu hanya soal cara spec mendefinisikan enum deklarasi - bagian setelah usus besar harus menjadi terpisahkan-jenis produksi, yang merupakan salah satu tanda sbyte
, byte
, short
, ushort
, int
, uint
, long
, ulong
, char
... sebagai lawan jenis produksi digunakan oleh deklarasi variabel misalnya. Itu tidak menunjukkan perbedaan lainnya.
Akhirnya, ketika tiba saatnya untuk menggunakan: secara pribadi saya menggunakan alias di mana-mana untuk implementasi, tetapi tipe CLR untuk API apa pun. Ini benar-benar tidak terlalu penting yang Anda gunakan dalam hal implementasi - konsistensi di antara tim Anda bagus, tetapi tidak ada orang lain yang peduli. Di sisi lain, itu benar-benar penting bahwa jika Anda merujuk pada jenis dalam API, Anda melakukannya dengan cara yang netral bahasa. Metode yang disebut ReadInt32
tidak ambigu, sedangkan metode yang disebut ReadInt
membutuhkan interpretasi. Penelepon dapat menggunakan bahasa yang mendefinisikan int
alias untuk Int16
, misalnya. Desainer .NET framework telah mengikuti pola ini, contoh yang bagus ada di BitConverter
, BinaryReader
dan Convert
kelas.
string
merupakan konstruksi leksikal dari tata bahasa C # sedangkanSystem.String
hanya tipe. Terlepas dari perbedaan eksplisit yang disebutkan dalam spesifikasi apa pun, masih ada perbedaan implisit yang dapat diakomodasi dengan beberapa ambiguitas. Bahasa itu sendiri harus mendukungstring
dengan cara yang implementasi tidak (cukup) jadi wajib untuk mempertimbangkan untuk kelas tertentu di BCL.