《Visual C# 最佳實務》第一章 程式設計 (三):變數

來源:互聯網
上載者:User
文章目錄
  • 1.3.1標識符
  • 1.3.2變數與資料類型
  • 1.3.3變數命名規範

 

第一章 程式設計

  “要想成為真正的程式員,我們需要進行一場洗禮。”
  “程式 = 資料結構 + 演算法。”這樣的公式很精闢,它越過了表層直接描述了程式的本質。不僅如此,這樣幾個簡單的單詞也讓我們明白“我們應該學習什麼內容?”。人們做任何事都有一定的程式,只是沒有意識到。有些人將日常行動列成表格,這就是“編寫程式”。

 

本章的學習重點:

  ◆    標識符
  ◆    變數與資料類型
  ◆    變數命名規範

 

1.3變數

  變數是程式設計語言中最小的邏輯單位,變數在程式中的作用是為了儲存在使用者使用應用程式時產生的臨時資料,這些資料是暫時存放在記憶體中。定義一個變數需要告訴記憶體是什麼資料類型的變數,就好像在生活中,一個杯子(資料類型)名字叫做牛奶杯(變數的名字)裝的是(=)液體牛奶(臨時資料)。

 

1.3.1標識符

  在C#中,標識符是用來聲明變數、函數及其他各種使用者定義物件名。標識符的長度可長可短,可以使用一個字元,也可以由若干個字元組成。C#中標識符只能由大寫字母、小寫字母、底線(_)、數字(0-9)和@字元組成。而且必須以大寫字母、小寫字母或底線開頭,不能以數字開頭,同時標識符中間不能包含空格。例如:a;hello;Color;_Color;this_is_valid等都是合法的標識符形式;1test;Color.test;this is;$test;if;hello world等字串則不能用作標識符。
  標識符大小寫敏感,比如變數名name和Name代表兩個不同的變數。儘管如此,我們仍不建議僅利用大小寫不同來代表兩個不同的標識符,大多數情況下,標識符應該是望名知義。
  @字元只可以用在標識符的第一個字元,帶@首碼的標識符稱為逐字標識符,這在與其他的程式設計語言建立介面時很有用,字元@並不是標識符的實際組成部分,因此在其他語言中可能將此標識符視為不帶首碼的正常標識符。允許將@首碼於關鍵字用於標識符,如@class, @bool等。但是不到萬不得已,不強烈建議這樣做。下面我們來看一個樣本:
1 using System;
2 namespace Microsoft.Example
3 {
4     public class TestKeyword
5     {
6         static void Main()
7         {
8             @class.@static(true);            //調用使用關鍵字定義的方法
9         }
10         class @class                    //使用關鍵字class定義一個類
11         {
12             public static void @static(bool @bool)                //使用關鍵字static定義一個方法
13             {
14                 if (@bool)                                    //使用關鍵字bool定義一個變數
15                 {
16                     System.Console.WriteLine("結果為true");    //輸出結果
17                 }
18                 else
19                 {
20                     System.Console.WriteLine("結果為false");    //輸出結果
21                 }
22             }
23         }
24     }
25 }
  上述代碼中,@雖然出現在C#標識符中,但不作為C#標識符本身的一部分。因此,以上樣本,定義了一個名為class的類,並包含一個名為static的方法,以及一個參數名為了bool的形參。這樣,對於跨語言的移植帶來了便利。因為,某個單詞在C#中作為保留關鍵字,但是在其他語言中也許不是。
  最後的輸出結果:結果為true
  我們再來看下面一個樣本:
  class Program
  {
      public static void Test(string @str)
      {
            System.Console.WriteLine(str);
      }
  }
  當然@也可以加在非關鍵字之前,這樣@str就一點效果也沒有,@str等價於str,一般不鼓勵使用。
  關鍵字是對編譯器具有特殊意義的預定義保留標識符。它們不能在程式中用作標識符,除非它們有一個 @ 首碼。例如,@if 是一個合法的標識符,而 if 不是合法的標識符,因為它是關鍵字。
  下面是C#關鍵字列表
  abstract    event    new    struct
  As    explicit    null    switch
  Base    extern    object    this
  bool    false    operator    throw
  break    finally    out    true
  Byte    fixed    override    try
  Case    float    params    typeof
  catch    for    private    uint
  char    foreach    protected    ulong
  checked    goto    public    unchecked
  class    if    readonly    unsafe
  const    implicit    ref    ushort
  continue    in    return    using
  decimal    int    int    virtual
  default    interface    sealed    volatile
  delegate    internal    short    void
  Do    is    sizeof    while
  double    lock    stackalloc    Else
  long    static    enum    namespace
  string    get    partial    set
  value    where    yield   
  什麼是關鍵字?為了協助編譯器對代碼進行解釋,C#中的一些單詞具有特殊的地位和含義,我們把它們稱為關鍵字(keyword)或者保留字(reserved word)。關鍵字提供了具體的文法,編譯器根據這些文法來解釋程式員書寫的運算式。在HelloWorld程式中,class、static和void 均是關鍵字。
  編譯器利用關鍵字來識別代碼的結構與組織方式。由於編譯器對這些單詞有著嚴格的解釋,所以只能遵照程式設計語言能夠識別的特定規則來使用關鍵字。換言之,程式設計語言規定開發人員只能將關鍵字放在特定的位置。一旦程式員違反了這些規則,編譯器就會報錯。

 

1.3.2變數與資料類型

  變數代表資料的實際儲存位置。各個變數所能儲存的數值由它本身的類型決定。在變數被賦值以前,變數自身的類型必須被明確地聲明。
  例如:變數聲明的文法格式
  資料類型 變數名(標識符);
  資料類型 變數名(標識符)= 初值;
  其中,第一種定義方法只是聲明一個變數,並沒有對變數進行賦值,此時變數使用預設。第二種定義方法對變數進行了初始化,但需注意的是,變數值應該與VARIANT 資料型別相一致。
  給變數賦值時,臨時資料根據相應的資料類型合理的存放,比如杯子是不能用來裝石頭,同時我們要考慮到這樣一種情況,現在我們往牛奶杯裡裝了牛奶,當牛奶喝完了,我們還可以用牛奶杯裝可樂,臨時資料改變了,但是資料類型沒有改變,因為都是液體,這種情況我們習慣叫做修改了變數牛奶杯的值,或是重新給牛奶杯賦了一個值。
  C#語言共有7種變數類型:靜態變數,執行個體變數,數組元素,值參數,引用參數,輸出參數和局部變數。
  舉個例子:
     class A
    {
        public static int x;
        int y;
        void F(int[] v, int a, ref int b, out int c)
        {
            int i=1;
        }
     }
  x 是一個靜態變數;y 是一個執行個體變數;v[0]是一個數組元素;a 是一個值參數;b 是一個引用參數;c 是一個輸出參數;i是一個局部變數。下面向大家簡單介紹各種變數,更詳細內容請參考相關章節。
  1、靜態變數
  使用static修飾符定義的變數稱為靜態變數。靜態變數只能通過類名直接存取,屬於類成員。
  2、執行個體變數
  沒有使用static 修飾符聲明的變數稱為執行個體變數。當建立某類的一個執行個體的時候,屬於該類的執行個體變數也被產生,當不再有關於這個執行個體的引用而且執行個體的解構函式執行了以後,此執行個體變數失效。
  3、數組元素
  當任意一個數組執行個體被建立時,這個數組的元素也被同時建立,當不再有任何正對這個數組執行個體的引用時,它的元素也就此失效。
  4、值參數
  只要不帶有ref 修飾的參數聲明,我們都稱它為值參數。不管這個參數是實值型別還是參考型別。
  5、引用參數
  只要帶有ref 修飾的參數聲明,我們都稱它為引用參數。如果是參考型別,傳遞的其實是引用的引用。
  6、輸出參數
  只要帶有out 修飾的參數聲明,我們稱它為輸出參數。輸出參數本身並不建立新的儲存空間。同時,輸出參數和引用參數很類似,只是輸出參數不用初始化,就可以在方法內部使用。
  7、局部變數
  在方法中申明的變數,叫做局部變數。通常在for 迴圈語句或者switch 分支語句中出現。當控制權離開 for 迴圈語句或者 switch 分支語句時,其中的相關局部變數隨即失效。
  變數還有一個重要的概念,就是範圍。變數的範圍就是可以訪問該變數的代碼地區。一般情況下,範圍有以下規則:
  1、如果這個變數是類的一個欄位,不管是執行個體變數,還是靜態變數,這個類就是它的範圍,這個類的所有代碼都內訪問到這個變數。
  2、如果這個變數是一個局部變數,範圍存在於聲明該變數的塊語句或方法結束的封閉花括弧內。
  3、在for、while或類似語句中聲明的局部變數存在於該迴圈體內。
  程式在不同部分為不同的變數使用相同的變數名是很常見的。只要變數的範圍是程式的不同部分,就不會有問題,也不會產生模糊性。但要注意,同名的局部變數不能在同一範圍內聲明兩次,不然,局部變數的範圍就會衝突,所以不能使用下面的代碼:
  int x = 20;
  int x = 30;
  可以考慮使用下面的代碼:
  public static int Main()
  {
      for (int i = 0; i < 10; i++)
      {
         Console.WriteLine(i);
      }        //這時變數i已經走出範圍
      for (int i = 9; i >= 0; i--)
      {
         Console.WriteLine(i);
      }        //這時變數i已經走出範圍
      return 0;
  }
  這段代碼使用一個for迴圈列印出從0~9的數字,再列印從9~0的數字。重要的是在同一個方法中,代碼中的變數i聲明了兩次。可以這麼做的原因是在兩次聲明中,i都是在迴圈內部聲明的,所以變數i對於迴圈來說是局部變數。
  下面看看另一個例子:
  public static int Main()
  {
      int j = 20;
      for (int i = 0; i < 10; i++)
      {
         int j = 30;            //編譯失敗
         Console.WriteLine(j + i);
      }
      return 0;
  }
  如果試圖編譯它,就會產生錯誤,局部變數j不能在這個範圍內聲明兩次,因為這會給變數j賦予不同的含義。

 

1.3.3變數命名規範

  在編寫代碼時遵循命名規則,可以讓程式更加易懂、易讀;而且有些時候還能提供它的一些功能資訊,有助於對程式的理解。有些朋友也知道一些命名規範,但是在編寫代碼的過程中所採用的命名方式經常變動,沒有形成固定的風格。這裡對C#的命名規範進行了總結,方便以後查詢。
  命名規範的原則:
  1、在同一種技術中,盡量在所有的代碼中採用同一種命名規範。
  2、盡量採用來自官方的命名規範。
  3、特殊情況,特殊處理,但是理由要充分。
  C#語言的變數主要使用三種命名法,它們分別是:匈牙利命名法、Camel命名法與Pascal命名法。
  匈牙利命名法:在Windows編程中使用非常普遍,由微軟的一位匈牙利程式員提出。匈牙利命名法通過在變數名前面加上相應的小寫字母的符號標識作為首碼,標識出變數的範圍、類型等。例如,strName表示這是一個字串的變數。在物件導向的程式設計中匈牙利命名法使用起來非常彆扭,也使用特別少,目前唯一建議使用的地方就是控制項的變數名,例如:一個按鈕,我們使用btnSubmit來命名,這樣就很清楚這個變數是按鈕,至於其他,就很少用,因為IDE現在已經很強大,提示功能很強。
  Camel命名法:即駱駝式命名法,原因是採用該命名法的名稱看起來就像駱駝的駝峰一樣高低起伏。Camel命名法有兩種形式:混合使用大小寫字母和單詞之間加底線,例如firstName和first_Name都屬於Camel命名法,Camel命名法除了第一個單詞外,所有單詞第一個字母大寫,其他字母小寫。
  使用Camel大小寫形式:public class helloWorld{...}
  Pascal命名法:與Camel命名法類似,不過Pascal命名法的所有首字母為大寫字母,其他字母小寫。
  使用Pascal大小寫形式:public class HelloWorld{...}
  下面向大家列舉一些常用的命名規則:
  1、使用Pascal的命名規範命名類和方法的名字。
  public class MyClass
  {
  public MyMethod(){…}
  }
  2、使用Camel命名規範命名局部變數和方法的參數。
  int number;
  void MyMethod(string myName){…}
  3、在命名介面的時候使用I作為首碼。
  interface IMyInterface{...}
  4、私人成員變數使用m_作為首碼。
  public class MyClass
  {
  private int m_Number;
  }
  5、自訂的屬性類使用Attribute作為其尾碼。
  6、自訂的異常類使用Exception作為其尾碼。
  7、在命名方法的時候使用動賓結構的短語,比如:ShowDialog()。
  8、有傳回值的方法應該有一個可以描述其傳回值的名字,比如:GetObjectState()。
  9、使用有意義的變數名稱。
  10、使用C#語言的類型而不使用System命名空間中其別名來申明變數。例如:
  使用object 而不是 Object
  使用string 而不是 String
  使用 int 而不是 Int32
  11、使用有意義的命名空間,比如使用公司的名稱以及產品的名稱。
  12、避免使用完全限定名。而使用using語句替換之。
  13、避免將using語句寫在命名空間的內部。
  14、將所有的架構定義的命名空間為一組,自訂的和第三方的命名空間放在另一組。
  15.保持嚴格的縮排風格。
  16、在編寫注釋的時候注釋的縮排和編碼的縮排必須是相同層級的。
  17、儘可能在第一次使用局部變數的時候申明它。
  18、檔案名稱應該可以反映出它所包含的類。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.