Chỉ vì mục đích hoàn chỉnh, đây là một đống thông tin liên quan ...
Như những người khác đã lưu ý, string
là một bí danh cho System.String
. Chúng biên dịch thành cùng một mã, vì vậy tại thời điểm thực hiện không có sự khác biệt nào. Đây chỉ là một trong những bí danh trong C #. Danh sách đầy đủ là:
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
Ngoài string
và object
, các bí danh là tất cả các loại giá trị. decimal
là một loại giá trị, nhưng không phải là loại nguyên thủy trong CLR. Loại nguyên thủy duy nhất không có bí danh là System.IntPtr
.
Trong thông số kỹ thuật, các bí danh loại giá trị được gọi là "các loại đơn giản". Chữ có thể được sử dụng cho các giá trị không đổi của mọi loại đơn giản; không có loại giá trị nào khác có sẵn theo nghĩa đen. (So sánh điều này với VB, cho phép bằng DateTime
chữ và cũng có bí danh cho nó.)
Có một trường hợp trong đó bạn phải sử dụng các bí danh: khi chỉ định rõ ràng loại cơ bản của enum. Ví dụ:
public enum Foo : UInt32 {} // Invalid
public enum Bar : uint {} // Valid
Đó chỉ là vấn đề của con đường spec định nghĩa enum tờ khai - phần sau dấu hai chấm phải là không thể thiếu kiểu sản xuất, đó là một chiếc thẻ của sbyte
, byte
, short
, ushort
, int
, uint
, long
, ulong
, char
... như trái ngược với một loại sản xuất như được sử dụng bởi các khai báo biến chẳng hạn. Nó không chỉ ra sự khác biệt nào khác.
Cuối cùng, khi nói đến việc sử dụng: cá nhân tôi sử dụng các bí danh ở mọi nơi để triển khai, nhưng loại CLR cho bất kỳ API nào. Nó thực sự không quan trọng quá nhiều mà bạn sử dụng về mặt triển khai - tính nhất quán trong nhóm của bạn là tốt, nhưng không ai khác sẽ quan tâm. Mặt khác, điều thực sự quan trọng là nếu bạn đề cập đến một loại trong API, bạn sẽ làm như vậy theo cách trung lập về ngôn ngữ. Một phương thức được gọi ReadInt32
là không rõ ràng, trong khi một phương thức được gọi ReadInt
yêu cầu giải thích. Ví dụ, người gọi có thể đang sử dụng một ngôn ngữ xác định int
bí danh Int16
. Các nhà thiết kế .NET framework đã theo mô hình này, các ví dụ tốt là trong BitConverter
, BinaryReader
và Convert
các lớp học.
string
là một cấu trúc từ vựng của ngữ pháp C # trong khiSystem.String
chỉ là một loại. Bất kể sự khác biệt rõ ràng nào được đề cập trong bất kỳ thông số kỹ thuật nào, vẫn có sự khác biệt ngầm này có thể được bổ sung với một số sự mơ hồ. Bản thân ngôn ngữ phải hỗ trợstring
theo cách mà việc triển khai không (hoàn toàn) vì vậy bắt buộc phải xem xét cho một lớp cụ thể trong BCL.