1、變數的基本概念 變數是指用來存儲特定類型的數據,可以根據需要隨時改變變數中所存儲的數據值。變數具有名稱、類型和值,因此使用變數之前必須先聲明變數,即指定變數的類型和名稱。 2、變數類型 變數類型根據其定義可以分為兩種:一種是值類型,另一種是引用類型。這兩種變數類型的區別在於數據的存儲方式,值類型 ...
1、變數的基本概念
變數是指用來存儲特定類型的數據,可以根據需要隨時改變變數中所存儲的數據值。變數具有名稱、類型和值,因此使用變數之前必須先聲明變數,即指定變數的類型和名稱。
2、變數類型
變數類型根據其定義可以分為兩種:一種是值類型,另一種是引用類型。這兩種變數類型的區別在於數據的存儲方式,值類型的本身是直接存儲數據;而引用類型是存儲實際數據的引用,程式通過引用查找到真正的數據。
1、值類型
值類型只要包括整數類型、浮點類型以及布爾類型等,值類型變數直接存儲其數據值,它在記憶體棧中進行分配,因此效率很高,使用值類型主要是為了提高性能。
值類型具有以下特點:
•值類型變數都存儲在堆棧中;
•訪問值類型是,一般都是直接訪問其實例;
•每個值類型變數都有自己的數據副本,因此對一個值類型變數的操作不會影響其他變數;
•複製值類型變數時,複製的是變數的值,而不是變數的地址;
•值類型變數不能為null,必須具有一個確定的值;
(1)整數類型
整數類型代表一種沒有小數點的整數數值,在c#中內置的整數類型如下:
類型 |
說明 |
範圍 |
sbyte |
8位有符號整數 |
-128~127 |
short |
16位有符號整數 |
-32768~32767 |
Int |
32位有符號整數 |
-2147483648~2147483647 |
long |
64位有符號整數 |
-9223372036854775808~9223372036854775807 |
byte |
8位無符號整數 |
0~127 |
ushort |
16位無符號整數 |
0~65535 |
Uint |
32位無符號整數 |
0~4294967295 |
ulong |
64位無符號整數 |
0~18446744073709551615 |
值得註意的是,在使用整數類型時,要確保數值大小,以免發生運算溢出的錯誤。
(2)浮點類型
浮點類型變數主要用於處理含有小數的數據,浮點類型主要包括float和double兩種數值類型。
類型 |
說明 |
範圍 |
float |
精確到7位數 |
|
double |
精確到15~16位數 |
|
如果不做任何設置,包含小數點的數值都被認為是double類型,如果要將數值以float類型來處理,通過強制使用f或F將其指定為float類型
如果是要將數值強制指定為double類型,需要使用d或D進行設置:
(3)布爾類型
布爾類型主要用來表示true/false,一個布爾類型的值只能是true或者false,不能將其指定為其他類型的值,布爾類型不能與其他類型進行轉換。
2、引用類型
引用類型是構建c#引用程式的主要對象類型數據,在應用程式執行的過程中,對象類型以 new創建對象實例,並且存儲在堆棧中。堆棧是一種由系統彈性配置的記憶體空間沒沒有特定的大小以及存活時間,因此可以被彈性地運用於對象的訪問。
引用類型的特征:
1、必須在托管堆中為引用類型變數分配記憶體;
2、必須使用new關鍵字來創建引用類型變數;
3、在托管堆中分配每個對象都有與之相關的附加成員,這些成員必須被初始化;
4、引用類型變數是由垃圾回收機制來管理的;
5、多個引用類型邊浪可以引用同一個對象,這種情況下,對一個變數操作會影響另一個變數所引用的同一個變數;
6、引用類型被賦值前的值都是null;
3、值類型與引用類型的區別
從概念上說,值類型是直接存儲其值的,而引用類型則是存儲對其值的引用,這兩種類型存儲在記憶體的不同地方。在c#中,再設計類型的時候就要決定類型實例的行為,如果系統不能理解應用類型和值類型的區別,將會給代碼帶來不必要的異常。
從記憶體上看,值類型是在棧中操作的,而引用類型則是在堆中分配記憶體單元。棧在編譯時就分配好記憶體空間,在代碼中有棧的明確定義;而堆是程式運行中動態分配的記憶體空間,可以根據程式的運行情況動態地分配記憶體的大小。因此,值類型總是在記憶體中占用一個預定義的位元組數。而引用類型的變數則在棧中分配一個記憶體空間,這個記憶體空間包含對另一個記憶體位置的引用,這個位置是托管堆中的一個地址,即存放此變數實際值的地方。
4、枚舉類型
枚舉類型是一種獨特的值類型,他生命一組具有相同性質的常量。就比如我們編寫與日期相關的引用程式的時候,經常要使用到面、月、星期等日期數據,可以將這些數據組成多個不同名稱的枚舉類型。使用枚舉類型可以增加程式的可讀性和可維護性,同事,也可以避免類型的錯誤。
特別註意的是,在定義枚舉類型時,如果不對其進行複製,預設情況下,第一個枚舉數的值為0,後面每個枚舉數的值一次遞增1.
在c#中用關鍵字enum聲明枚舉,形式如下:
1 enum 枚舉名 2 3 { 4 5 list1=value1, 6 7 list2=value2, 8 9 ... 10 11 listN=valueN 12 13 }enum聲明
其中,大括弧中的內容為枚舉值列表,每個枚舉對應一個枚舉值名稱,value1--valueN為整數數據類型,list1--listN則為枚舉值的標識名稱。
5、類型轉換
類型轉換就是將一種類型轉換成另一種類型,具體可以分為隱式轉換和顯式轉換兩種方式:
(1)隱式轉換
所謂隱式轉換就是不需要聲明就能進行的轉換,進行轉換的時候編譯器不需要進行檢查就能安全的轉換,下麵是可以進行隱式轉換的數據類型:
從int、uint、long、ulong到float,以及從long或ulong到double的轉換可能導致精度損失,但是不會影響數量級。當一種類型的值轉換為大下相等或更大的一種類型時,發生擴大轉換;當一種類型的值轉換為較小的一種類型時,則發生收縮轉換。
(2)顯式轉換
顯式轉換也可以稱為強制轉換,需要在代碼中明確地聲明要轉換的類型。
(3)裝箱拆箱
將值類型轉換為引用類型的過程叫做裝箱,相反,將引用類型轉換為值類型的過程稱為拆箱。
裝箱
從上面例子可以看出,將值類型變數的值複製到裝箱得到的對象中,裝箱後改變值類型變數的值,並不會影響裝箱對象的值。
拆箱
拆箱操作時要註意要符合類型一直的原則,否則會出現異常。
3、變數操作
1、聲明變數
聲明變數就是指定變數的名稱和類型,未經聲明的變數本身是不合法的,因此也沒有辦法在程式中使用。聲明一個變數由一個類型和跟在後面的衣蛾或多個變數組成,多個變數間用逗號隔開,聲明變數以分好結束。
c#變數名是一種標識符,應該符合標識符的命名規則。變數名區分大小寫,規則如下:
•變數名只能由數字、字母和下劃線組成;
•變數名的第一個符號只能是字母和下劃線;
•不能使用關鍵字作為變數名;
•如果在一個語句塊中定義了一個變數名,那麼在變數的作用域內不能再定義相同名稱的變數。
2、變數的作用域
變數的作用域就是可以訪問該變數的代碼區域,可以通過一下規則確定:
•只要欄位所屬的類在某個作用域內,其欄位也在該作用域內;
•局部變數存在於表示聲明該變數的塊語句或者方法結束的封閉花括弧之前的作用域內;
•在for、while或類似語句中聲明的局部變數存在於該迴圈體內。
3、變數的賦值
使用賦值運算符“=”來給變數賦值,將等號右邊的值賦給等號左邊的變數。
4、常量
常量顧名思義是值固定不變的量,在系統編譯時就已經確定好的,常量使用關鍵字const來創建,並且在創建常量是必須設置它的初始值。常量的類型只能為下列類型之一:sbyte、byte、short、ushort、int、uint、long、ulong、cahr、float、decimal、double、bool、string等。
總結:
上面重點介紹了變數與常量,重點掌握的是值類型、引用類型和枚舉類型的概念及用法,並且瞭解類型的轉換。掌握如何對變數進行操作,瞭解變數的作用域以及如何給變數賦值,以及常量的基本概念和基本類型。知識點內容不多,都很基礎,但是也是最為重要的一部分知識點,萬丈高樓平地起,我們要掌握好這些基礎的知識點,才能在編程這條路越走越遠,希望這篇文章能給你帶來一定的幫助,謝謝支持!