2010-08-07 19 views
8

Tôi đang làm một số phân loại và tôi không chắc chắn:C# - là loại dữ liệu NGẮN hoặc nó vẫn là INT?

INT là một kiểu dữ liệu nguyên thủy với từ khóa "int"

Nhưng tôi có thể sử dụng Int16, Int32 hoặc Int64 - Tôi biết C# có tên riêng của mình đối với họ . Nhưng những loại dữ liệu đó hay nó vẫn là INT? Và chủ yếu, chúng ta có thể nói "ngắn" là một kiểu dữ liệu hay INT16 là một kiểu dữ liệu? Cảm ơn :)

Trả lời

21

Trong C#, những điều sau đây luôn đúng:

  • short == Int16
  • ushort == UInt16
  • int == Int32
  • uint == UInt32
  • long == Int64
  • ulong == UInt64

Cả hai phiên bản là các kiểu dữ liệu. Tất cả những điều trên là các số nguyên có độ dài khác nhau và ký hiệu.

Sự khác biệt chính giữa hai phiên bản (theo như tôi biết) là màu nào chúng được đánh dấu như trong Visual Studio.

+0

Màu sắc có thể liên quan đến việc đó có phải là từ khóa hay không. Vì vậy, bạn có thể có thể đặt tên một biến 'Int32', nhưng không phải' int'. – Philipp

+0

Sự khác biệt là cột bên trái chứa các tên C# gốc, thích hợp hơn. Trường hợp ngoại lệ là các cuộc gọi đến các phương thức tĩnh và các thuộc tính của các lớp này, mà phải là các tên CLR. –

+0

@Philipp Ah, điều này đúng. Tôi không nghĩ về điều đó. Không phải là bạn nên đặt tên biến Int32! ;) –

3

short là loại dữ liệu đại diện cho các số nguyên 16 bit (1 đơn đặt hàng bên dưới int, là 32 bit).

Int16 thực tế cũng là loại dữ liệu và đồng nghĩa với short. Đó là,

Int16.Parse(someNumber); 

cũng trả về một short, giống như:

short.Parse(someNumber) 

Cùng đi với Int32 cho intInt64 cho long.

2

Trong C#, int chỉ là một cách ngắn hơn để nói System.Int32.

Trong .NET, ngay cả các kiểu dữ liệu nguyên thủy thực sự là các đối tượng (bắt nguồn từ System.Object).

Vì vậy, một int trong C# = một số nguyên trong VB.Net = System.Int32.

có một biểu đồ của tất cả các loại dữ liệu .NET ở đây: http://msdn.microsoft.com/en-us/library/47zceaw7%28VS.71%29.aspx

Đây là một phần của .NET Common Type System cho phép khả năng tương tác liền mạch giữa các ngôn ngữ .NET.

+0

"Trong .NET, ngay cả các kiểu dữ liệu nguyên thủy thực sự là đối tượng" bạn có chắc chắn về điều này không? Tôi luôn luôn nghĩ về nguyên thủy như không xuất phát từ đối tượng, và chuyển đổi từ và đối tượng yêu cầu boxing và unboxing (trình biên dịch C# ẩn khỏi bạn, nhưng vẫn xảy ra ở cấp độ IL. sử dụng __box và __unbox hoặc một cái gì đó tương tự) –

+0

@Ben: Đó là Java. Trong .NET, các kiểu giá trị có thể được lưu trữ * unboxed, nhưng chúng vẫn có nguồn gốc từ 'System.Object', vì vậy chúng luôn có thể được sử dụng khi một đối tượng' 'là bắt buộc. Và, vâng, điều này có nghĩa là chúng được tự động đóng hộp, với phiên bản đóng hộp được bắt nguồn từ 'Object'. –

+0

Tôi nghĩ rằng cả hai đều đúng. Đằng sau hậu trường, int nói chung là một mảnh bộ nhớ 4 byte, nhưng về mặt logic nó là một cấu trúc có nguồn gốc từ đối tượng, và boxing tự động cần thiết xảy ra để duy trì sự xuất hiện đó. Vì vậy, thực sự, có hay không đó là một đối tượng phụ thuộc vào mức độ khái niệm bạn đang nói về. –

0

Điều chưa được đề cập trong bất kỳ câu trả lời nào khác là loại giá trị System.IntPtr, có chiều rộng bit là nền tảng cụ thể; ví dụ. trên một hệ thống 32-bit, nó là 32 bit, trong khi trên một hệ thống 64-bit, nó là 64 bit rộng.

Điều đó đang được nói, từ tất cả những gì tôi có thể thu thập loại này, không thực sự được sử dụng thay cho bất kỳ loại nào khác trong số các loại int khác; sử dụng chính của nó có thể nằm với P/Gọi vào API hệ thống cơ bản, nơi nó thường được sử dụng để giữ con trỏ.

Các vấn đề liên quan