由string与String谈起.PDFVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
由string与String谈起

由 string與 String談起 黃宣龍 asker_pachelbel@ string or String? 如果你是個 C#初學者,也許你曾經懷疑過這個 問題:「書上不是說 C#是個大小寫有別的語言 嗎?那為什麼這兩個程式都可以跑?」 using System; class Class1 { static void Main(string[] args) { string s = I love dotspace.; //這個string是小寫開頭 Console.WriteLine(s); } } using System; class Class1 { static void Main(string[] args) { String s = I love dotspace.; //這個String是大寫開頭 Console.WriteLine(s); } } 事實上,這兩個程式不但都能跑,如果你使用 ildasm來看這兩段程式碼編譯出來的 IL碼的 話,你還會發現這兩個程式根本就產生了一模一 樣的 IL碼。這到底是怎麼一回事呢,這兩段程 式碼究竟有沒有差別呢? 內建型別(Predefined Type) 按照坊間升研究所補習班教的答題技巧指導來 看,若這一題只有 10分,答案應該是「String 指的是 System.String類別,而 string則是 C#內 建的關鍵字。事實上,string正是對應到 System.String類別,也可說 string是 System.String 類別在 C#中的化名(alias),因此兩段 C#程式碼 都會編譯出相同的 IL碼,對於 CLR而言這兩者 是沒什麼差別的。」 若是這題被配了有 40分呢?那也許我們得由什 麼叫做內建型別(Predefined Type)談起。 內建型別,又稱做原生型別(Primitive Type),顧 名思義就是一個語言內建的型別。也就是說,一 個符合該語言標準的編譯器,應該要能直接支援 這種型別。一般來講,這意味著該語言應該會為 該型別規範出一個語言關鍵字,而編譯器要能認 得這個關鍵字並在編譯時產生適當的碼。以 C# 來說,像是整數(int),浮點數(float),字串(string) 等都是內建型別,你可以直接使用這些關鍵字撰 寫你的程式,而 C#編譯器將能看懂這些關鍵字 並為你編譯出適當的 IL碼供執行之用。這邊還 有個比較不嚴謹的簡陋講法,「程式語言有提供 化名(alias)的型別就是該語言的內建型別了」。 為什麼需要內建型別呢? 為什麼要讓編譯器支援這些關鍵字來對應這些 型別呢?有一個原因是因為這些型別實在太常 用了,透過這樣的方式會方便許多。當你想要用 一個變數來儲存年齡時,你想要怎麼寫呢?是 int age = 20; 還是 System.Int32 age = new System.Int32(); age = 20; 畢竟整數,浮點數,字元,字串等型別在程式中 實在太常用了。如果每次都得來一行 System.Int32 age = new System.Int32(); 實在吃不消不是嗎? 此外,內建型別也意味著編譯器在設計時就已經 瞭解這些型別的實作細節,所以編譯器對於內建 型別可以有更多的處理知識,因而能更有彈性且 有力的處理這些型別。舉例來說,在使用內建型 別時我們可以不用 new來 new去,一行 int i = 10; 就通通搞定。而在將精度較低的內建型別轉型至 精度較高的內建型別時我們可以不需多做指示 地讓它隱式轉型(Implicit cast): int i = 20; double j = i; 請注意,這和衍生類別能自動向上轉型(upcast) 為基底類別的情況並不一樣,因為 int並不是繼 承 double而來,他們都是繼承自 System.ValueType,換言之,在繼承體系之中, 他們倆是平行的。此例之中 int之所以能自動地 轉型成 double乃是因為編譯器知道 int和 double 這兩個內建型別是做什麼用的,並判斷出可以無 害的將 int轉型為 double,因此能順利編譯過關 且正常運作。 那麼,到底要 String還是 string呢? 現在,你應該已經知道什麼叫內建型別,也瞭解 到 String和 string到最後都是一樣的,因為這兩 種程式碼都會產生相同的 IL碼。那麼,我們到 底應該使用哪種風格來撰寫程式呢?在 C#語言 規格書 1.2.1中是這樣說的:「As a matter of style, use of the keyword

文档评论(0)

***** + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8016031115000003

1亿VIP精品文档

相关文档