程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 10個鮮為人知的C#關鍵字

10個鮮為人知的C#關鍵字

編輯:C#入門知識

在正式開始之前,我需要先聲明:這些關鍵字對於偏向底層的程序員更加耳熟能詳,對這些關鍵字不了解並不影響你作為一個合格的程序員。

這意味著這些關鍵字會讓你在編寫程序時得到更好的代碼質量和可讀性,enjoy

yield

yield關鍵字會告訴編譯器當前的函數是在一個循環內部,編譯器會相應生成一個執行它在循環體內部所表示行為的類,yield和return關鍵字一起用於為枚舉器對象提供返回值,比如說:在foreach內部的每一次循環內,yield關鍵字用於終止當前循環:

 

      public classList 
  { 
       //using System.Collections; 
      public static IEnumerable Power(int number, int exponent) 
       { 
           int counter = 0; 
           int result = 1; 
           while(counter++ < exponent) 
           { 
               result = result * number; 
               yield return result; 
           } 
       } 

       static void Main() 
       { 
           // Display powers of 2 up to the exponent 8: 
          foreach (int i in Power(2, 8)) 
           { 
               Console.Write("{0} ", i); 
           } 
       } 
   } 
   /* 
   Output: 
   2 4 8 16 32 64 128 256 
   */

MSDN鏈接:http://msdn.microsoft.com/en-us/library/9k7k7cf0.aspx

 

var

自從C# 3.0開始,在函數作用局范圍內聲明的變量可以通過var關鍵字聲明成隱含類型,隱含類型是強類型,你需要自己聲明隱含類型本地變量,然後編譯器會幫你決定為某種強類型。

在2.0版本上跑的程序也可以使用var關鍵字,但是需要你的編譯器是3.0以上版本並且設置代碼輸出版本為2.0:

var i = 10; // implicitly typed

int i = 10; //explicitly typed

 

 

 

MSDN鏈接:http://msdn.microsoft.com/en-us/library/bb383973.aspx

 

using()

定義一個范圍,在范圍外的對象將會被回收:

using (C c = new C())

{

    c.UseLimitedResource();

}

 

MSDN鏈接:http://msdn.microsoft.com/en-us/library/yh598w02%28VS.80%29.aspx

 

readonly

readonly關鍵字是一個可作用在變量域上的修飾符,當一個變量域被readonly修飾後,這個變量只可在聲明或者當前變量所屬類的構造器內賦值。

MSDN鏈接:http://msdn.microsoft.com/en-us/library/acdd6hb7%28VS.80%29.aspx

 

as

as操作符很像一個類型轉換器,然和,當轉換無法發生時(譯者按:比如類型不匹配),as會返回null而不是拋出一個異常:

class Class1{ }

classClass2{ }

classClass3: Class2{ }

classIsTest

   {

        static voidTest(objecto)

        {

            Class 1a;

            Class 2b;

            if(o isClass1)

            {

                Console.WriteLine("o is Class1");

                a = (Class1)o;

                // Do something with "a."

            }

            else if (o is Class2)

            {

                Console.WriteLine("o is Class2");

                b = (Class2)o;

                // Do something with "b."

            }

            else

            {

                Console.WriteLine("o is neither Class1 nor Class2.");

            }

        }

        static void Main()

        {

            Class1 c1 = new Class1();

            Class2 c2 = new Class2();

            Class3 c3 = new Class3();

            Test(c1);

            Test(c2);

            Test(c3);

            Test("a string");

        }

    }

    /*

    Output:

    o is Class1

    o is Class2

    o is Class2

    o is neither Class1 nor Class2.

    */

 

 

MSDN鏈接:http://msdn.microsoft.com/en-us/library/scekt9xw.aspx

 

default

在泛型類和泛型方法中產生的一個問題是,在預先未知以下情況時,如何將默認值分配給參數化類型 T:

  • T 是引用類型還是值類型。

  • 如果 T 為值類型,則它是數值還是結構。

給定參數化類型 T 的一個變量 t,只有當 T 為引用類型時,語句 t = null 才有效;只有當 T 為數值類型而不是結構時,語句 t = 0 才能正常使用。解決方案是使用 default 關鍵字,此關鍵字對於引用類型會返回 null,對於數值類型會返回零。對於結構,此關鍵字將返回初始化為零或 null 的每個結構成員,具體取決於這些結構是值類型還是引用類型:

T temp = default(T);

 

MSDN鏈接:http://msdn.microsoft.com/en-us/library/xwth0h0d.aspx

 

global

在  ::運算符前面使用的 global 上下文關鍵字引用全局命名空間,該命名空間是任何 C# 程序的默認命名空間,未以其他方式命名。

class TestClass : global::TestApp { }

MSDN鏈接:http://msdn.microsoft.com/en-us/library/cc713620.aspx

 

volatile

volatile 關鍵字表示字段可能被多個並發執行線程修改。聲明為volatile 的字段不受編譯器優化(假定由單個線程訪問)的限制。這樣可以確保該字段在任何時間呈現的都是最新的值。

MSDN鏈接:aspx" target="_blank">http://msdn.microsoft.com/en-us/library/x13ttww7%28VS.80%2

  1. 上一頁:
  2. 下一頁: