C# 數(shù)據(jù)類型

C#是一種強(qiáng)類型的語言。這意味著我們必須聲明一個變量類型,該變量指示將要存儲的值的類型,例如整數(shù),浮點(diǎn)數(shù),十進(jìn)制,文本等。

以下聲明和初始化了不同數(shù)據(jù)類型的變量。

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

C#主要將數(shù)據(jù)類型分為兩種:值類型和引用類型。值類型包括簡單類型(例如int,float,bool和char),枚舉類型,結(jié)構(gòu)類型和Nullable值類型。引用類型包括類類型,接口類型,委托類型和數(shù)組類型。在下一章中將詳細(xì)了解值類型和引用類型。

C#數(shù)據(jù)類型

C#中的預(yù)定義數(shù)據(jù)類型

C#包括一些預(yù)定義的值類型和引用類型。下表列出了預(yù)定義的數(shù)據(jù)類型:

類型描述范圍后綴
byte8 位無符號整數(shù)類型0 到 255
sbyte8 位有符號整數(shù)類型-128 到 127
short16 位有符號整數(shù)類型-32,768 到 32,767
ushort 16 位無符號整數(shù)類型0 到 65,535
int32 位有符號整數(shù)類型-2,147,483,648

2,147,483,647


uint32 位無符號整數(shù)類型0 到 4,294,967,295u
long64 位有符號整數(shù)類型-9,223,372,036,854,775,808

9,223,372,036,854,775,807
l
ulong64 位無符號整數(shù)類型0 到 18,446,744,073,709,551,615ul
float32 位單精度浮點(diǎn)型-3.402823e38 到 3.402823e38f
double64 位雙精度浮點(diǎn)型-1.79769313486232e308 to 1.79769313486232e308d
decimal128 位精確的十進(jìn)制值,28-29 有效位數(shù)(+ 或-)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

如上表所示,每種數(shù)據(jù)類型(字符串和對象除外)都包含值范圍。如果該值超出數(shù)據(jù)類型的允許范圍,則編譯器將給出錯誤。例如,int數(shù)據(jù)類型的范圍是-2,147,483,648到2,147,483,647。因此,如果分配的值不在此范圍內(nèi),則編譯器將給出錯誤。

    示例:編譯時錯誤

// 編譯時錯誤:無法將類型'long'隱式轉(zhuǎn)換為'int'。
int i = 21474836470;

無符號整數(shù),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類型

預(yù)定義的數(shù)據(jù)類型為其.NET類型(CLR類)名稱的別名。下表列出了預(yù)定義數(shù)據(jù)類型的別名和相關(guān)的.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;// 同上

類型轉(zhuǎn)換

某些數(shù)據(jù)類型的值會在C#中自動轉(zhuǎn)換為不同的數(shù)據(jù)類型。這稱為隱式轉(zhuǎn)換。

int i = 345;
float f = i;

Console.WriteLine(f); //輸出:345

在上面的實(shí)例中,整型變量 i 的值被賦給float類型 f 的變量,因?yàn)檫@個轉(zhuǎn)換操作是在C#中預(yù)定義的。

以下是隱式數(shù)據(jù)類型轉(zhuǎn)換表。

隱式轉(zhuǎn)換
sbyteshort, int, long, float, double, decimal
byteshort, ushort, int, uint, long, ulong, float, double, decimal
shortint, long, float, double, or decimal
ushortint, uint, long, ulong, float, double, or decimal
intlong, float, double, or decimal.
uintlong, ulong, float, double, or decimal
longfloat, double, or decimal
ulongfloat, double, or decimal
charushort, int, uint, long, ulong, float, double, or decimal
floatDouble

從int、uint、long或ulong轉(zhuǎn)換為float以及從long或ulong轉(zhuǎn)換為double可能會導(dǎo)致精度損失。沒有數(shù)據(jù)類型隱式轉(zhuǎn)換為char類型。

但是,并非所有數(shù)據(jù)類型都隱式轉(zhuǎn)換為其他數(shù)據(jù)類型。例如,int類型不能隱式轉(zhuǎn)換為uint。必須明確指定它,如下所示。

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

在上面的示例中,整數(shù)i通過在括號(uint)中指定uint顯式地轉(zhuǎn)換為uint。這將把整數(shù)轉(zhuǎn)換成uint。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清