10個鮮為人知的C 關鍵字

2022-02-22 10:33:04 字數 2443 閱讀 3871

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

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

yieldyield關鍵字會告訴編譯器當前的函式是在乙個迴圈內部,編譯器會相應生成乙個執行它在迴圈體內部所表示行為的類,yield和return關鍵字一起用於為列舉器物件提供返回值,比如說:在foreach內部的每一次迴圈內,yield關鍵字用於終止當前迴圈:

public classlist           }        static

void main() ", i); } } } /* output: 2 4 8 16 32 64 128 256 */

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())

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

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

class class1classclass2classclass3: class2classistest               else

if (o is class2) else } static

void main() } /* output: o is class1 o is class2 o is class2 o is neither class1 nor class2. */

default在泛型類和泛型方法中產生的乙個問題是,在預先未知以下情況時,如何將預設值分配給引數化型別 t:

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

t temp = default(t);

global在  ::運算子前面使用的 global 上下文關鍵字引用全域性命名空間,該命名空間是任何 c# 程式的預設命名空間,未以其他方式命名。

volatilevolatile 關鍵字表示字段可能被多個併發執行執行緒修改。宣告為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

的網格控制項。

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

在正式開始之前,我需要先宣告 這些關鍵字對於偏向底層的程式設計師更加耳熟能詳,對這些關鍵字不了解並不影響你作為乙個合格的程式設計師。這意味著這些關鍵字會讓你在編寫程式時得到更好的 質量和可讀性,enjoy yield yield關鍵字會告訴編譯器當前的函式是在乙個迴圈內部,編譯器會相應生成乙個執行它...

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

來自 在正式開始之前,我需要先宣告 這些關鍵字對於偏向底層的程式設計師更加耳熟能詳,對這些關鍵字不了解並不影響你作為乙個合格的程式設計師。這意味著這些關鍵字會讓你在編寫程式時得到更好的 質量和可讀性,enjoy yield yield關鍵字會告訴編譯器當前的函式是在乙個迴圈內部,編譯器會相應生成乙個...

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

在正式開始之前,我需要先宣告 這些關鍵字對於偏向底層的程式設計師更加耳熟能詳,對這些關鍵字不了解並不影響你作為乙個合格的程式設計師。這意味著這些關鍵字會讓你在編寫程式時得到更好的 質量和可讀性,enjoy yield yield關鍵字會告訴編譯器當前的函式是在乙個迴圈內部,編譯器會相應生成乙個執行它...