標籤:
今天在拜讀Stoneniqiu的【讀書筆記】--代碼整潔之道時,遇到一個詞叫做"實體變數",原諒我如此無知吧,這麼基礎的東西到現在都不清楚,汗顏。於是就迅速去看看這個變數到底是什麼玩意兒……
實體變數(執行個體變數),說道這個東東,就得說說類變數(靜態變數)。
先看個類:
public class ExampleVariable { public static int Num1 { get; set; } public int Num2 { get; set; } public void ChangeNums(int n1,int n2) { Num1 = n1; this.Num2 = n2; } public int[] GetNums() { return new int[] { Num1, Num2 }; } }
帶static的Num1就是類變數,不帶static的Num2就是實體變數了。那他們有什麼區別呢?
看一段小小的小代碼:
- 聲明對象1,給2個變數分別賦值,顯示對象1的變數資料;
- 聲明對象2,給2個變數分別賦值,分別顯示對象1和對象2的變數資料;
public MainWindow() { InitializeComponent(); ExampleVariable example1 = new ExampleVariable(); example1.ChangeNums(10, 11); int[] nums1 = example1.GetNums(); tbk1.Text = string.Format("example1:Num1={0},Num2={1}", nums1[0], nums1[1]) ;//類中的static不屬於任何對象 tbk1.Text+= Environment.NewLine + Environment.NewLine; ExampleVariable example2 = new ExampleVariable(); example2.ChangeNums(20, 21); nums1 = example1.GetNums(); tbk1.Text += string.Format("example1:Num1={0},Num2={1}", nums1[0], nums1[1]) ;//類中的static不屬於任何對象 tbk1.Text+= Environment.NewLine ; int[] nums2 = example2.GetNums(); tbk1.Text += string.Format("example2:Num1={0},Num2={1}", nums2[0], nums2[1]);//類中的static不屬於任何對象 }
運行結果:
可以看出:
① 類中Num1不屬於this指標,this.Num1這樣的寫法是不正確的;但是Num2是屬於This的,完全可以this.Num2;
② Num1是static的,只能在類ExampleVariable中被使用,如果該類對象需要修改他的值,必須通過成員函數來實現,
但是Num2完全可以在對象中直接調用:對象.Num2;
③ Num1屬於整個類,所有對象對其只有1分拷貝。當對象2修改了Num1時,對象1的Num1也將改變,因為2個對象公用Num1,但是Num2就不會變化。
C# 實體變數/類變數 static