C#數據類型分爲三類,分別是值類型,引用類型,指針類型(不常用)
值類型:直接分配一個值,指的就是系統分配內存來存儲一個數據。
簡單值類型的數據類型包含以下幾種:
💗 整數類型
類型 | 描述 | 範圍 |
默認值 |
byte | 8 位無符號整數 | 0 到 255 | 0 |
int | 32 位有符號整數類型 | -2,147,483,648 到 2,147,483,647 | 0 |
long | 64 位有符號整數類型 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 0L |
sbyte | 8 位有符號整數類型 | -128 到 127 | 0 |
short | 16 位有符號整數類型 | -32,768 到 32,767 | 0 |
uint | 32 位無符號整數類型 | 0 到 4,294,967,295 | 0 |
ulong | 64 位無符號整數類型 | 0 到 18,446,744,073,709,551,615 | 0 |
ushort | 16 位無符號整數類型 | 0 到 65,535 |
0 |
💗 字符類型
類型 | 描述 | 範圍 |
默認值 |
char | 16 位 Unicode 字符 | U +0000 到 U +ffff | '\0' |
💗 浮點類型(實數類型)
類型 | 描述 | 範圍 |
默認值 |
double | 64 位雙精度浮點型 | (+/-)5.0 x 10-324 到 (+/-)1.7 x 10308 | 0.0D |
float | 32 位單精度浮點型 | -3.4 x 1038 到 + 3.4 x 1038 | 0.0F |
decimal | 128 位精確的十進制值,28-29 有效位數 | (-7.9 x 1028 到 7.9 x 1028) / 100 到 28 | 0.0M |
💗 布爾類型
類型 | 描述 | 範圍 |
默認值 |
bool | 布爾值 | True 或 False | False |
複合值類型的數據類型包括以下幾種:
❤ 結構類型
struct類型是一種值類型,通常用於封裝小型相關變量組。(在這個結構類型中,可以定義多個不同簡單值類型的變量)
舉個栗子:
//定義一個書的特徵
public struct Book
{
public decimal price;
public string title;
public string author;
}
❤ 枚舉類型
枚舉類型是一種值類型, 基於整數類型的一系列命名常量,爲了定義枚舉類型,通常使用enum關鍵字和枚舉成員的名字。
舉個栗子:
枚舉季節
enum Season
{
Spring,
Summer,
Autumn,
Winter
}
引用類型:分配一個地址,存儲的是一個內存位置,不指具體的一個數值。【對一個變量執行的操作會影響另一個變量所引用的對象】
引用類型的數據烈性包含以下幾種:
❤ 內置的引用類型:
類型 | 描述 |
object | 對象類型:是C#通用類型系統中所有數據類型的終極基類 |
Dynamic | 動態類型:可以存儲任何類型的值在動態數據類型變量中 |
String |
字符串類型:可以分配變量任何字符串值 |
對象類型涉及一個裝箱和取消裝箱問題
裝箱是將值類型轉換爲object類型或由此值類型實現的任何藉口類型的過程。
取消裝箱是從對象中提取值類型。
//裝箱 boxing
int i = 3 ; //分配在棧上
object o = i ; //隱式裝箱操作,int i 在堆上
object b = (object)i ; //顯示裝箱操作
----------------------
//拆箱 unboxing
int j = (int) o ; //顯示拆箱(將對象o拆箱爲int類型)
----------------------
int k = b ; //error!!, 不能隱式拆箱
https://www.cnblogs.com/zjtao/p/11345442.html
深度解讀裝箱:裝箱是先爲object變量在堆上開闢一方空間,然後將棧上存放的數值轉存到堆上,棧上殘留的就是堆上的值所在的位置-------存儲地址,所以這樣就造成什麼問題呢?訪問速度慢(先訪問棧,然後再去訪問堆,訪問堆的速度遠遠慢於訪問堆的速度)且佔用內存大(需要爲變量在堆上開闢空間)
靈魂拷問:爲什麼訪問速度慢且佔用內存大,還要使用引用數據呢?直接用值數據不就可以了,棧上存放數值,直接讀取數值。
因爲運用引用類型可以表示同一對象的不同屬性,對其進行封裝。
eg:
基本數據都是單一的值"hello"123 true,值和值之間沒有聯繫
比如,表示一個人的信息(name gender age)
var name="孫悟空";
var gender='男';
var age=18;
創建的變量都是獨立,不能成爲一個整體,比如,gender也可以表示豬八戒的性別,
obj.name="孫悟空";
obj.gender='男';
obj.age=18;
對比之前就可以看出對象表示一個人的信息有整體性,相當於把多個變量放到一個箱子中
https://blog.csdn.net/shang_0122/article/details/103677259
❤ 聲明引用類型
class
interface
delegate
C#數據類型與SQL sever數據類型對應關係
本文到此就暫時結束了,感謝閱讀,敬請斧正~ 💗💗💗