Demi kelengkapan, berikut adalah kumpulan informasi terkait ...
Seperti yang telah dicatat orang lain, stringadalah 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 stringdan object, alias semua untuk tipe nilai. decimaladalah 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 DateTimeliteral, 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 ReadInt32tidak ambigu, sedangkan metode yang disebut ReadIntmembutuhkan interpretasi. Penelepon dapat menggunakan bahasa yang mendefinisikan intalias untuk Int16, misalnya. Desainer .NET framework telah mengikuti pola ini, contoh yang bagus ada di BitConverter, BinaryReaderdan Convertkelas.
stringmerupakan konstruksi leksikal dari tata bahasa C # sedangkanSystem.Stringhanya 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 mendukungstringdengan cara yang implementasi tidak (cukup) jadi wajib untuk mempertimbangkan untuk kelas tertentu di BCL.