在正式開始之前,我需要先宣告:這些關鍵字對於偏向底層的程式設計師更加耳熟能詳,對這些關鍵字不了解並不影響你作為乙個合格的程式設計師。
這意味著這些關鍵字會讓你在編寫程式時得到更好的**質量和可讀性,enjoy
yield
yield關鍵字會告訴編譯器當前的函式是在乙個迴圈內部,編譯器會相應生成乙個執行它在迴圈體內部所表示行為的類,yield和return關鍵字一起用於為列舉器物件提供返回值,比如說:在foreach內部的每一次迴圈內,yield關鍵字用於終止當前迴圈:
public classlist }
var自從c# 3.0開始,在函式作用局範圍內宣告的變數可以通過var關鍵字宣告成隱含型別,隱含型別是強型別,你需要自己宣告隱含型別本地變數,然後編譯器會幫你決定為某種強型別。
在2.0版本上跑的程式也可以使用var關鍵字,但是需要你的編譯器是3.0以上版本並且設定**輸出版本為2.0:
var i = 10; // implicitly typed
int i = 10; //explicitly typed
using()
定義乙個範圍,在範圍外的物件將會被**:
using (c c = new c())
c.uselimitedresource();
readonly
readonly關鍵字是乙個可作用在變數域上的修飾符,當乙個變數域被readonly修飾後,這個變數只可在宣告或者當前變數所屬類的構造器內賦值。
asas操作符很像乙個型別轉換器,然和,當轉換無法發生時(譯者按:比如型別不匹配),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.
default
在泛型類和泛型方法中產生的乙個問題是,在預先未知以下情況時,如何將預設值分配給引數化型別 t:
t 是引用型別還是值型別。
如果 t 為值型別,則它是數值還是結構。
給定引數化型別 t 的乙個變數 t,只有當 t 為引用型別時,語句 t = null 才有效;只有當 t 為數值型別而不是結構時,語句 t = 0 才能正常使用。解決方案是使用 default 關鍵字,此關鍵字對於引用型別會返回 null,對於數值型別會返回零。對於結構,此關鍵字將返回初始化為零或 null 的每個結構成員,具體取決於這些結構是值型別還是引用型別:
t temp = default(t);
global
在 ::運算子前面使用的 global 上下文關鍵字引用全域性命名空間,該命名空間是任何 c# 程式的預設命名空間,未以其他方式命名。
volatile
volatile 關鍵字表示字段可能被多個併發執行執行緒修改。宣告為volatile 的字段不受編譯器優化(假定由單個執行緒訪問)的限制。這樣可以確保該字段在任何時間呈現的都是最新的值。
extern alias
有時可能有必要引用具有相同完全限定型別名的程式集的兩個版本,例如當需要在同一應用程式中使用程式集的兩個或更多的版本時。通過使用外部程式集別名,來自每個程式集的命名空間可以在由別名命名的根級別命名空間內包裝,從而可在同一檔案中使用。
若要引用兩個具有相同完全限定型別名的程式集,必須在命令列上指定別名,如下所示:
/r:gridv1=grid.dll
/r:gridv2=grid20.dll
這將建立外部別名 gridv1 和 gridv2。若要從程式中使用這些別名,請使用 extern 關鍵字引用它們。例如:
extern alias gridv1;
extern alias gridv2;
每乙個外部別名宣告都引入乙個額外的根級別命名空間,它與全域性命名空間平行,而不是在全域性命名空間內。因此,來自每個程式集的型別就可以通過各自的、根源於適當的名空間別名的完全限定名來引用,而不會產生多義性。
在上面的示例中,gridv1::grid 是來自 grid.dll 的網格控制項,而 gridv2::grid 是來自 grid20.dll 的網格控制項。
www.fengfly.com
fengfly.com作業系統雨楓 技術 教程 fengfly.com 雨楓 技術 教程 fengfly.com
譯 10個鮮為人知的C 關鍵字
來自 在正式開始之前,我需要先宣告 這些關鍵字對於偏向底層的程式設計師更加耳熟能詳,對這些關鍵字不了解並不影響你作為乙個合格的程式設計師。這意味著這些關鍵字會讓你在編寫程式時得到更好的 質量和可讀性,enjoy yield yield關鍵字會告訴編譯器當前的函式是在乙個迴圈內部,編譯器會相應生成乙個...
譯 10個鮮為人知的C 關鍵字
在正式開始之前,我需要先宣告 這些關鍵字對於偏向底層的程式設計師更加耳熟能詳,對這些關鍵字不了解並不影響你作為乙個合格的程式設計師。這意味著這些關鍵字會讓你在編寫程式時得到更好的 質量和可讀性,enjoy yield yield關鍵字會告訴編譯器當前的函式是在乙個迴圈內部,編譯器會相應生成乙個執行它...
10個鮮為人知的C 關鍵字
在正式開始之前,我需要先宣告 這些關鍵字對於偏向底層的程式設計師更加耳熟能詳,對這些關鍵字不了解並不影響你作為乙個合格的程式設計師。這意味著這些關鍵字會讓你在編寫程式時得到更好的 質量和可讀性,enjoy yieldyield關鍵字會告訴編譯器當前的函式是在乙個迴圈內部,編譯器會相應生成乙個執行它在...