中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#基本語法實例分析

發布時間:2022-04-11 10:10:42 來源:億速云 閱讀:124 作者:iii 欄目:開發技術

這篇“C#基本語法實例分析”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“C#基本語法實例分析”文章吧。

一.基礎語法

1.C#區分大小寫,所以myVar和MyVar是兩個不同的變量。
2.每個C#可執行文件(如控制臺應用程序,Windows應用程序和Windows服務)都必須有一個入口點————Main()(M大寫)

  public static void Main()
  {
  //do something
  }

在程序啟動時調用這個方法。該方法要么沒有返回值(void),要么返回一個整數(int)

二.變量

1.編譯器不允許在表達式中使用未初始化的變量。如果變量是類或結構中的字段,如果沒有初始化,創建這些變量時,其默認值就是0。
2.類型推斷
類型推斷(type inference)使用var關鍵字。編譯器可以根據變量的初始化值“推斷”變量的類型。var somenum = 0;即使somenum從來沒有聲明為int,編譯器也可以確定,只要somenum在其作用域內,就是一個int.聲明了變量,推斷出了類型后,就不能改變變量類型了。變量的類型確定后,就遵循其它變量類型遵循的強類型化規則。
3.變量的作用域
變量的作用域是訪問該變量的代碼區域。只要變量的作用域是程序的不同部分就不會有問題。
(1).局部變量的作用域沖突

  public static int Main()
  {
      int j =20;
      for(int i=0;i<20;i++)
      {
      int j = 30;
      // do something
      }
  }

編譯時會報錯,因為在Main()方法作用域內有兩個變量j,編譯器無法區分這兩個變量。
(2).字段和局部變量的作用域沖突
某些情況下可以區分名稱相同,作用域相同的兩個標識符。原因是C#在變量之間有一個基本的區分,它把在類級別聲明的變量看作字段,而把在方法中聲明的變量看作局部變量。

  class Program
  {
      int j = 20;
      static void Main(string[] args)
      {
        int j = 30;
        Console.WriteLine(j);
        Console.ReadKey();
      }
  }

雖然在Main()方法的作用域內聲明了兩個j,這段代碼也會編譯。在類級別上定義的j,在該類刪除前是不會超出作用域的,在Main()中聲明的j隱藏了同名的類級別變量,所以運行代碼時會顯示30.

三.常量

顧名思義,常量是其值在使用過程中不會發生改變的變量。在聲明和初始化變量時,在變量的前面加上關鍵字const,就可以把該變量指定為一個常量:const int a =100;
常量的特點;

  • *常量必須在聲明時初始化。指定了值之后就不能改寫了。

  • *常量的值必須能在編譯時用于計算。因此不能用于從一個變量中提取的值來初始化常量。如果需要,應使用只讀字段(后面介紹)。

  • *常量總是靜態的。但注意,不必(實際上不允許)在常量聲明中包含static

使用常量的好處:

  • *由于使用易于讀取的名稱(名稱的值易于理解)代替了較難讀取的數字或字符串,常量使程序變得更易于閱讀。

  • *常量使程序易于修改。當常量的值需要修改時,只需要把新值賦給這個常量,不必查找整個程序去修改。

  • *常量更容易避免程序出現錯誤。如果在聲明常量的位置以外的地方給常量賦值,編譯器會報錯。

四.CTS類型

C#認可的基本預定義類型并沒有內置于C#語言中,而是內置于.NET Framework中。
例如,在C#中聲明一個int類型的數據時,聲明的實際上是.NET結構System.Int32的一個實例。這表示在語法上,可以把所有的基本數據類型看成支持某些方法的類。
把int i 轉化為string, string s = i.ToString();
在這種便利的語法背后,類型實際上仍存儲為基本類型。基本類型在概念上用.NET 結構表示,所以沒有性能損失。
C#有15個預定義類型,string,object是引用類型。

五.枚舉

  public enum TimeDay
  {
      Morning=0,
      Afternoon = 1,
      Evening=2
  }

1.枚舉是用戶定義的整數類型。
2.從長遠來看,創建枚舉可以節省大量時間,減少許多麻煩。使用枚舉比使用整數的優勢:

  • *枚舉可以使代碼更易于維護,有助于確保給變量指定合法的,期望的值;

  • *枚舉使代碼更清晰,用描述性的名稱表示整數值,而不是用含義模糊,變化多端的數來表示;

3.在C#中,枚舉的真正強大之處是它們在后臺會實例化為派生于基類System.Enum的結構。這表示可以對它們調用方法,執行有用的任務。

TimeDay td =TimeDay.Afternoon;
Console.WriteLine((td.ToString());

注意因為.NET Framework的執行方式,在語法上把枚舉當成結構不會造成性能損失。實際上,一旦代碼編譯好,枚舉就成為基本類型,與int和float類似。
4.從字符串中獲取枚舉值

TimeDay td = (TimeDay)Enum.Parse(typeof(TimeDay),"afternoon",true);
Console.WriteLine((int)td);

要從字符串中轉換,需要使用靜態方法Enum.Parse,第一個參數是要使用的枚舉類型,第二個是要轉換的字符串,第三個是指定在轉換時是否忽略大小寫。
Enum.Parse方法實際上返回一個對象引用(一個字符串)&mdash;&mdash;&mdash;&mdash;我們需要把這個字符串顯示轉換為需要的枚舉類型(是一個拆箱操作)。

六.名稱空間

  • 1.名稱空間提供了一種組織相關類和其它類型的方式。與文件和組件不同,名稱空間是一種邏輯組合,而不是物理組合。

  • 2.不允許聲明嵌套在另一個名稱空間中的多部分的名稱空間。

  • 3.名稱空間與程序集無關。同一個程序集中可以有不同的名稱空間,也可以在不同的程序集中定義同一個名稱空間中的類型。

  • 4.名稱空間的別名

如果名稱空間的名稱很長,又要在代碼中多次引用,但不希望該名稱空間的名稱包含在using指令中(例如,避免類名沖突),就可以給
該名稱空間指定一個別名:

  using System.Text;
  using System.Threading.Tasks;

  namespace Wrox.ProC.basic
  {
    class NameSpaceEx
    {

    }
  }

  namespace ConsoleApplication1
  {
    using Intro = Wrox.ProC.basic;//給Wrox.ProC.basic指定別名Intro
    class Program
    {

      static void Main(string[] args)
      {
        Intro::NameSpaceEx nex = new Intro.NameSpaceEx();//實例化NameSpaceEx對象,要使用::修飾符
      }


    }
  }

七.Main()方法

C#程序是從Main()方法開始執行的,這個方法必須是類或結構的靜態方法,并且其返回類型必須是int或void。

1.多個Main()方法

在編譯C#控制臺或Windows應用程序時,默認情況下,編譯器會在類中查找與上述簽名匹配的Main()方法,并使這個類方法稱為程序的入口。
如果有多個Main()方法,編譯器就會報錯。

  namespace Wrox
  {
    class Client
    {
      public static int Main()
      {
        MathEx.Main();
        return 0;
      }
    }

    class MathEx
    {
      static int Add(int x,int y)
      {
        return x+y;
      }

      public static int Main()
      {
        int i = Add(5,10);
        return i;
      }
    }
  }

但是可以使用/main選項,后跟Main()方法所屬類的全名(包括名稱空),明確告訴編譯器把哪個方法作為程序的入口:

csc ConsoleApplication1.cs /main:Wrox.MathEx

2.給Main()方法傳遞參數

在調用程序時,可以讓CLR包含一個參數,將命令行參數傳遞給程序。這個參數是一個字符串數組,傳統上稱為args(但C#可以接受任何名稱)。

  class Program
  {
    static void Main(string[] args)
    {
      for (int i = 0; i < args.Length; i++)
      {
        Console.WriteLine(args[i]);
      }

    }
  }

使用命令行就可以編譯這段代碼。

  ConsoleApplication1 a b c
  a
  b
  c

八.C#預處理器指令

C#預處理器指令不會轉化為可執行代碼中的命令,但會影響編譯過程的各個方面。例如,使用C#預處理器指令可以禁止編譯器編譯代碼的某一部分。
如果計劃發布兩個版本的代碼,即基本代碼和擁有更多功能的企業版本,就可以使用預處理器指令。
C#提供了其它機制來實現C++指令的功能,如定制特性。C#并沒有一個像C++那樣的獨立預處理器,所謂的預處理器指令實際上是由編譯器處理的。
盡管這樣,C#仍保留了一些預處理器指令名稱,因為這些命令會讓人覺得就是預處理器。

1.#define和#undef

#define DEBUG

它告訴編譯器存在給定名稱的符號,類似聲明一個變量,但沒有真正的值,只是存在而已。這個符號不是實際代碼的一部分,而只是在編譯器編譯代碼
時存在。在C#代碼中沒有任何意義。

#undef DEBUG

刪除符號
#define 本身沒有什么用,與其它預處理器指令(特別是#if)結合使用時,它的功能就很強大。

2.#if,#elif(=else if),#else和#endif

這些指令告訴編譯器是否要編譯某個代碼塊

  #if DEBUG
  //do something
  #endif

#if,#elif還支持邏輯運算符“!”,"==","!=","||",與或...

3.#warning, #error

當編譯器遇到它們時,會分別產生這兩個指令后面的文本作為警告或錯誤。

  #if DEBUG
  #error "you didnot define DEBUG"
  #endif
  #warning "dont forget to remove"

4.#region和#endregion

#region和#endregion用于把一段代碼標記為又給定名稱的一個塊

  #region Member Field
  int x;
  double d;
  #endregion

它們可以被某些編譯器識別。

5.#pragma

#pragma指令可以抑制或還原指定的編譯警告。

  #pragma warning disable
  int i;
  #pragma warning restore

以上就是關于“C#基本語法實例分析”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鹤峰县| 图木舒克市| 东源县| 大理市| 紫云| 隆德县| 黄龙县| 水城县| 邵东县| 广饶县| 怀仁县| 靖远县| 建平县| 遵义市| 乌拉特中旗| 江华| 巧家县| 浮山县| 中山市| 台南市| 莱州市| 台江县| 唐山市| 晋中市| 图们市| 襄城县| 莒南县| 南靖县| 靖宇县| 威宁| 盐津县| 南雄市| 上犹县| 凌源市| 承德市| 乃东县| 平舆县| 保定市| 宁津县| 崇信县| 灵璧县|