Làm việc với các dạng và casting khác nhau trong C# (tiếp tục)
Có các chuyển đổi được định nghĩa giữa tất cả các dạng số trong C#. Khi nó là an toàn để làm như vậy, đây
là những chuyển đổi ngầm định. Khi nó là không an toàn, đây là những chuyển đổi công khai. Xem xét code này:
byte aByte = 3;
int anInt = aByte;
Biểu thức đơn giản aByte có một dạng byte. Tuy nhiên, nó cần được chuyển thành một int để được lưu giữ trong
biến anInt. Chuyển đổi từ một byte thành một int là một chuyển đổi rộng, am toàn, nên máy tính sẽ làm
chuyển đổi này diễn ra tự động. Code ở trên biên dịch mà không cần bạn làm bất cứ gì.
Nếu bạn đi theo con đường khác – một int thành một byte – chuyển đổi là không an toàn. Để biên dịch, chúng ta
cần tuyên bố cụ thể rằng chúng ta muốn sử dụng chuyển đổi, biết nguy cơ kéo theo. Để yêu cầu công khai cho một
chuyển đổi, bạn sử dụng toán tử casting, như thể hiện dưới đây:
int anInt = 3;
byte aByte = (byte)anInt;
Dạng để chuyển đổi thành được đặt trong dấu ( ) trước biểu thức để chuyển đổi. Code này nói ” Tôi biết anInt là một
int, nhưng tôi có thể làm việc với bất cứ hệ quả nào chuyển cái này thành một byte, nên hãy chuyển đổi nó”.
Bạn được phép viết ra một yêu cầu cụ thể cho một chuyển đổi ngầm định sử dụng cùng casting notation (ví dụ,
int anInt = (int)aByte;), nhưng nó không cần thiết nghiêm ngặt.
Có các chuyển đổi từ mọi dạng số thành mọi dạng số khác trong C#. Khi chuyển đổi là một chuyển đổi rộng, an toàn, chúng
là ngầm định. Khi chuyển đổi là một chuyển đổi hẹp nguy cơ tiềm tàng, chúng là công khai. Ví dụ, có một chuyển đổi
ngầm định từ sbyte thành short, short thành int, và int thành long. Giống như vậy, có một chuyển đổi ngầm định từ
byte thành ushort, ushort thành uint, và uint thành ulong. Cũng có một chuyển đổi ngầm định từ tất cả 8 dạng số nguyên
thành các dạng dấu phẩy động, nhưng không có cách khác đi quanh.