定義
被用來存儲特定類型的數據,可以根據需要隨時改變所存儲的數據值。具有名稱,類型和值這就是變量
分類
值類型
什么樣的變量是值類型呢?看值類型的特點吧
1.值類型變量都存儲在堆棧中。2.訪問值類型變量時,一般都是直接訪問其實例。
3.每個值類型變量都有自己的數據副本,因此對一個值類型的變量的操作不會影響其他的變量。
4.復制值類型變量時,復制的是變量的值,而不是變量的地址。
5.值類型變量不能為null,必須具有一個確定的值。
引用類型
1.必須在托管堆中為引用類型變量分配內存。2.必須使用new關鍵字來創建引用類型變量。
3.在托管堆中分配的每個對象都有與之相關聯的附加成員,這些成員必須被初始化。
4.引用類型變量是由垃圾回收機制來管理的。
5.多個引用類型變量都可以引用同一個對象,這種情形下,對一個變量的操作會影響另一個變量所引用的同一對象。
6.引用類型被賦值之前的值都是null。
看了以上值類型和引用類型大家有什么樣的想法,是不是想問一下什么樣的才是值類型,什么樣的又是引用類型呢?
其實我給大家一個簡單的方法來做判斷,那就是看它New不New如果使用New了肯定是引用類型,如果不使用可以直接認為是值類型
再說類型之間的區別之前我先來說一下變量的定義
格式是:datatype indentifier;
例如:
01
02
03
|
int
a;
int
c=0;
c = a;
|
a這個時候會報
- 使用了未賦值的局部變量“a”
這時Vs不會讓我們使用這個變量,除非咱們給他一個值。
如下
01
02
03
|
int
a=10;
int
c=0;
c = a;
|
這個時候才可以正常使用,這點大家一定要注意
下面我以一個例子來說一下值類型的變量
01
02
03
04
|
int
a = 1;
int
c = 0;
c = a;
c = c + 1;
|
大家現在可以猜一下c和a的值分別是多少。
看下面,開始我們定義了兩個變量,一個是a=1 c=0
然后呢把a給了c值又讓c加1,我們輸出結果看一下
01
|
c=2; a=1;
|
這說明什么,雖然說a給了c但是a確不會根據c的變量而改變,這就是值類型的變量
下面咱們再一起來看看引用類型的變量
看代碼
01
02
03
04
05
06
07
08
09
10
11
|
public
class
Student
{
/// <summary>
/// 姓名
/// </summary>
public
string
name {
get
;
set
; }
/// <summary>
/// 年齡
/// </summary>
public
string
age {
get
;
set
; }
}
|
首先我們定義一個學生類,
然后看下面代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
|
//初始化一個學生類對象s
Student s =
new
Student()
{
//姓名為sufei
name =
"sufei"
,
//年齡為24
age =
"24"
};
//定義一個新的學生類對象s1
Student s1 = s;
s1.name =
"小李"
;
s1.age =
"26"
;
|
如果我們還安上面的思路來判斷的話輸出 的結果應該是
01
02
|
s.name=sufei; s.age=24;
s1.name=小李; s1.age=26;
|
其實呢,這就是引用類型的特別,真實的結果並不是這樣的
看下輸出的結果
01
02
03
|
//現在輸出s1 和s的值
s.name=小李; s.age=26;
s1.name=小李; s1.age=26;
|
為什么他們的值是一樣的呢、
我們並沒有修改s的屬性值啊
其實在 Student s1 = s;這一句時s1得到的並不是s的值,頁是s的地址。當然修改時也是修改的地址對應的值,當然s的值為根據s1的值改變了
好啦大家自己做下測試吧。
1.定義變量時,數據類型后面添加“?”
在變量類型后添加“?”表示可空值類型。
例如:
01
|
int
a =
null
;
|
以上代碼VS會提示錯誤:無法將 Null 轉換成 “int” ,因為它是一種不可以為 null 值的類型。
但寫成以下格式就不會報錯了:
01
|
int
? a =
null
;
|
此時,變量a可以為空(null),並且可以通過它的 HasValue 屬性來判斷是否有值,並通過 Value 屬性獲得真正的值。
它可以通過對包裝類型直接賦值的方式隱式創建,如:
01
|
int
? a = 50;
|
如Int32、結構體等這樣的類型是不可能為空的,常見的如int,DateTime都是不可能為空的。所以在需要判斷是否有值的場合,可以用加問號的可空值類型,如int?,DateTime?等
變量的基本說明與定義就到這里止。到具體類型時咱們再一個一個的看他們具體的用法。