嵌入式學習資源—說說使用static和const關鍵字

千鋒教育官方發表於2019-08-14

static const 兩個關鍵字 , 好像都是跟靜態有關 , 初學時易於混淆不算 , 實際用的時候也是能不用就不用 , 反正用這兩個關鍵字的機會也少 , 而且不用也可以 , 呵呵 , 這種想法也不是我一個人有的 , 幾乎所有人這麼做時也不是想了想才決定的 , 此事無關風月 , 關乎天性 , 呵呵 .
   
首先一定要弄清楚的是 ,static 關鍵字修飾的成員雖然叫靜態成員 , 卻並非是不可改的 , 如果有這個誤解 , 千萬要從此忘記 .static 關鍵字被用來宣告一個跟物件無關的型別成員 , 這個說法好像不容易理解 , 舉個例子 :

 public class Class1()
 {
   public static x = 1;
   public y = 2;
   public Class1()
   {

   }
 }
 public class Class2()
 {
   Class1 myClass1 = new Class1();
   myClass1.x = 2; //
不可以 !x 為靜態成員 , 不能以 Class1 的例項物件引用
   myClass1.y = 3; //
可以

   Class1.x = 2;  // 可以
   Class1.y = 3;  //
不可以 ,y 不是靜態成員 , 只能以 Class1 的例項物件來引用
 }
   
   
從上面程式碼片斷可以看到 , 使用 static 修飾的欄位 , 只能用類名來引用 , 而不能透過類例項化了的物件來應用 , 那麼這麼做有什麼用處 ? 用處是明顯的 , 舉上面的例子來說 , 不管 Class1 類例項化了多少個物件 , 這些物件的 x 欄位的值都是一樣的 , 而且對 x 欄位值的修改 , 會體現在所有該型別的物件中 . 如在 Class2 類的程式碼中對 Class1 類再例項化一個物件 myClass2, myClass1 myClass2 物件的 x 成員的值都是相同的 , 如果 Class1.x 的值改為 10, myClass1.x myClass2.x 的值都是 10.
    C#
是一種完全物件導向化的語言 , 所有的欄位都包含在物件中 , 所以沒有像 C++ 或者 VB 裡那樣的全域性變數存在 , 這裡 , 使用 static 關鍵字修飾的欄位起到了一個全域性變數的作用 .
   
另外 ,static 關鍵字除了修飾變數 , 也修飾方法 , 屬性 , 事件等 , 除了使用 static 關鍵字修飾的方法 , 只能透過型別名稱來呼叫 . 這樣 , 對於需要頻繁使用的方法 , 使用 static 關鍵字修飾能夠節省 , 因為該方法不會被頻繁初始化 .
    const
關鍵字用於定義一個常量值 , 而且變數必須在宣告時賦值 , const 關鍵字定義的這個值是不允許修改的 , :

 const int CAPACITY;
 CAPACITY = 4;   //
不可以 ! 必須在宣告時賦值
 const int DEFAULT_CAPACITY = 4;
 string[] paramArr = new string[DEFAULT_CAPACITY];
 DEFAULT_CAPACITY = 2;  //
不可以 ! 此為常量值不可改
 
   
有人要說了 , 定義一個不能修改的值有意義麼 ? 當然有意義了啊 , 定義一個常量值常常用於初始化一個複雜物件的屬性值 , 這個值被不慎修改的話 , 有可能造成該複雜物件出現問題 ,
舉個淺顯的例子 , 如上面程式碼所示 , 一個字串陣列使用 DEFAULT_CAPACITY 常量初始話一個有 4 個元素的物件 paramArr, 從物件名可以猜的出來它是用來接受引數變數的 , 假如不慎對 DEFAULT_CAPACITY 誤操作修改成了 2, 那麼就有兩個引數值丟失了 , 從而可能造成不可預料的結果 , 所以一個常量值是有用處的 .
   
說道定義的變數不容修改的問題 , 不得不說起 C# 中還有一個 readonly 關鍵字 , 也是使用在欄位上定義不容修改的值 , 但是 const readonly 有幾個區別 ,
   
區別 1) 在語法上 ,const 定義的欄位只能在欄位宣告時初始化 , readonly 欄位既可以在宣告時初始化 , 也可以在建構函式中初始化 , 根據不同的初始化 ,readonly 定義的欄位可能會得到不同的值 .
   
區別 2) 在編譯時 , 因為 const 欄位在宣告時即初始化 , 所以是編譯時常數 , readonly 欄位雖然是隻讀的 , 其值卻可能要等到一個物件初始化後才能知曉 , 所以可以是執行時常數 ( readonly 欄位如在宣告時初始化仍是編譯時常數 ).

區別 3) 在使用時 ,const 欄位不能用 static 關鍵字修飾 , readonly 可以 .
   
說說這兩個關鍵字 , 作為好好練習 程式設計 基本功的開始 , 把這些關鍵字都會用了 , 我就可以說我 C# 入門了 , 呵呵 .


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69914734/viewspace-2653639/,如需轉載,請註明出處,否則將追究法律責任。

相關文章