C#標識符問題
來源:互聯網
上載者:User
C#中的標識符分這麼幾種:C#關鍵字、類型名、變數名、方法名。思考回憶下【標識符命名的規則】其中有這麼幾條值得注意: 其一,C#關鍵字統統為小寫,什麼是關鍵字?它是編譯器內建識別的標識符,是最為底層的標識符,所以類型名、變數名、方法名都不能和它重名,這在任何語言中都是一樣的;C#關鍵字有哪些?這個看似簡單的問題,其實還真不容易說的清楚,最好分類總結,C#的關鍵字已不是C語言中32個關鍵字那麼簡單,我就簡單分下類,不做統計: 有關類型定義的關鍵字:{class,struct,enum,interface,delegate}這是標準的CTS類型系統 有關類型的關鍵字:{int,string,bool,object,……..}這一集合都映射C#中的實際結構類型。 有關語句的關鍵字:{if,else,while,do,for,switch,case,return,using,foreach,…..}呵呵看看有沒有漏得得。 有關運算子的關鍵字:{new,as,is,sizeof,typeof,…..} 有關異常的關鍵字{try,catch,finaly,…} 有關類型和變數及方法修飾符的關鍵字:{public,private,internal,static,abstract,new,virtual,override,….} 有關參數的:{ref,out,..} 其它{var,where,event,in,null,this,base,get,set,value(不算)} ………………….其二,類型名規則。類型名在同域下不能重名。C#的類型系統更為複雜。本質上講,類型是有程式集界定的,命名空間邏輯組織限定的。有以下總結: 第一,要求就是類型的完全限定不允許重名,這是最根本的;第二,要求自身類型定義中不允許出現與類型同名的變數名。這個要求(規定)就較為尷尬了,也就是說除此之外,所有其它的情況下都可以定義和類型同名的變數。這樣下來,所謂的類型和變數,類型名和變數名就較為不好理解了,竟然可以同名?!!! 其三,C#的變數名。變數名最大域作用也就是限定在類的定義中(這反映出CIL是完全基於棧的語言),這些是類的資料成員;函數參數可以定義,函數內部可以定義,塊文法也可以定義,這些統稱局部變數。局部變數可以覆蓋類的資料變數,但局部變數不能彼此覆蓋(這一點和C/C++是完全不同),C#的做法消除了由於局部變數覆蓋父級同名變數可能意外情況! 其四,C#函數名實質上應該看成一個字面量(字面值)。在同域條件下,函數簽名不應相同,就是所謂的函數重載。 總之,無論如何,C#標識符的規則就是不應使編譯器對標識符在可能的情況下產生二義性。在同域條件下,類型名(只能在命名空間或嵌套類中)、函數簽名(類內)不應該重名;局部變數可以覆蓋類的資料變數,但局部變數之間不能覆蓋;允許類型名和變數名重名,不允許封閉類型和定義的成員重名,在類內不允許類的成員各個之間重名,但在函數參數和函數內允許函數名和變數名個重名