English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# 데이터 타입

C#은 강형 언어입니다. 이는 우리가 변수 타입을 선언해야 한다는 것을 의미합니다. 예를 들어, 정수, 실수, décimal, 텍스트 등 저장할 값의 타입을 지정해야 합니다.

以下声明和初始化了不同数据类型的变量。

string stringVar = "Hello World!!";
int intVar = 100;
float floatVar = 10.2f;
char charVar = 'A';
bool boolVar = true;

C#主要将数据类型分为两种:值类型和引用类型。值类型包括简单类型(例如int,float,bool和char),枚举类型,结构类型和Nullable值类型。引用类型包括类类型,接口类型,委托类型和数组类型。在下一章中将详细了解值类型和引用类型。

C#中的预定义数据类型

C#包括一些预定义的值类型和引用类型。下表列出了预定义的数据类型:

类型描述范围后缀
byte8 位无符号整数类型0 到 255
sbyte8 位有符号整数类型-128 부터 127
short16 位有符号整数类型-32,768 부터 32,767
ushort 16 位无符号整数类型0 到 65,535
int32 位有符号整数类型-2,147,483,648

부터

2,147,483,647


uint32 位无符号整数类型0 到 4,294,967,295u
long64 位有符号整数类型-9,223,372,036,854,775,808
부터
9,223,372,036,854,775,807
l
ulong64 位无符号整数类型0 到 18,446,744,073,709,551,615ul
float32 位单精度浮点型-3.402823e38 부터 3.402823e38f
double64 位双精度浮点型-1.79769313486232e308 到 1.79769313486232e308d
decimal128 位精确的十进制值,28-29 有效位数(+ 或-)1.0 x 10e-28  부터 7.9 x 10e28m
char16 位 Unicode 字符任何有效的字符,例如 a,*, \x0058 (hex), or\u0058 (Unicode)
bool8 位逻辑 true/false 值True 或 False
object所有类型的基类

string

Unicode字符序列



DateTime表示日期和时间0:00:00am 1/1/01
부터
11:59:59pm 12/31/9999

如表所示,每种数据类型(字符串和对象除外)都包含值范围。如果该值超出数据类型的允许范围,则编译器将给出错误。例如,int数据类型的范围是-2,147,483,648부터2,147,483,647따라서, 할당된 값이 이 범위에 속하지 않으면 컴파일러가 오류를 출력합니다.

    예제: 컴파일 시 오류

// 컴파일 시 오류: 'long' 타입을 'int' 타입으로 은닉 변환할 수 없습니다.
int i = 21474836470;

无损 정수, long, float, double 및 decimal 타입의 값은 각각 u, l, f, d 및 m 접미사로 끝나야 합니다.

uint ui = 100u;
float fl = 10.2f;
long l = 45755452222222l;
ulong ul = 45755452222222ul;
double d = 11452222.555d;
decimal mon = 1000.15m;

별명과 .NET 타입

예약된 데이터 타입은 .NET 타입(CLR 클래스) 이름의 별명입니다. 다음 표는 예약된 데이터 타입의 별명과 관련된 .NET 클래스 이름을 나열합니다.

别名.NET类型类型
byteSystem.Bytestruct
sbyteSystem.SBytestruct
intSystem.Int32struct
uintSystem.UInt32struct
shortSystem.Int16struct
ushortSystem.UInt16struct
longSystem.Int64struct
ulongSystem.UInt64struct
floatSystem.Singlestruct
doubleSystem.Doublestruct
charSystem.Charstruct
boolSystem.Booleanstruct
objectSystem.ObjectClass
stringSystem.StringClass
decimalSystem.Decimalstruct
DateTimeSystem.DateTimestruct

这意味着无论您定义的是int还是Int32,变量都相同。

int i = 345;
Int32 i = 345;// 同上

类型转换

某些数据类型的值会在C#中自动转换为不同的数据类型。这称为隐式转换。

int i = 345;
float f = i;
Console.WriteLine(f); //출력:345

위 예제에서는 전형적 변수 i의 값이 float 타입 변수 f에 할당되었으며, 이 변환 연산은 C#에서 предопределено로 이루어졌습니다。

다음은 명시적 데이터 타입 변환 표입니다。

명시적 변환부터
sbyteshort, int, long, float, double decimal
byteshort, ushort, int, uint, long, ulong, float, double, decimal
shortint, long, float, double 또는 decimal
ushortint, uint, long, ulong, float, double 또는 decimal
intlong, float, double 또는 decimal.
uintlong, ulong, float, double 또는 decimal
longfloat, double 또는 decimal
ulongfloat, double 또는 decimal
charushort, int, uint, long, ulong, float, double 또는 decimal
floatDouble

int、uint、long 또는 ulong에서 float으로 변환하거나 long 또는 ulong에서 double로 변환할 때 정밀도 손실이 발생할 수 있습니다. 데이터 타입이 char 타입으로 자동 변환되지 않습니다.

하지만, 모든 데이터 타입이 다른 데이터 타입으로 은닉적으로 변환되는 것은 아닙니다. 예를 들어, int 타입은 uint로 은닉적으로 변환되지 않습니다. 명시적으로 지정해야 합니다. 예를 들어 다음과 같이.

public static void Main()
{
    int i = 100;
    uint u = (uint)i;
    Console.Write(i);
}

위의 예제에서 정수 i는 괄호(uint)에서 uint를 명시적으로 변환하는(uint)i를 통해 uint로 변환됩니다. 이는 정수를 uint로 변환합니다.