日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

《Effective C#》读书笔记-1.C# 语言习惯-2.使用运行时常量(readonly)而不是编译时常量(const)...

發布時間:2023/12/10 C# 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《Effective C#》读书笔记-1.C# 语言习惯-2.使用运行时常量(readonly)而不是编译时常量(const)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概念

  • 編譯時


編譯時顧名思義就是正在編譯的時候。那啥叫編譯呢?就是編譯器幫你把源代碼翻譯成機器能識別的代碼。(當然只是一般意義上這么說,實際上可能只是翻譯成某個中間狀態的語言。比如Java只有JVM識別的字節碼,C#中只有CLR能識別的MSIL。另外還有鏈接器、匯編器。為了了便于理解我們可以統稱為編譯器)

那編譯時就是簡單的作一些翻譯工作,比如檢查你有沒有粗心寫錯啥關鍵字了啊。有啥詞法分析,語法分析之類的過程。就像個老師檢查學生的作文中有沒有錯別字和病句一樣。如果發現啥錯誤編譯器就告訴你。如果你用微軟的VS的話,點下build。那就開始編譯,如果下面有errors或者warning信息,那都是編譯器檢查出來的。所謂這時的錯誤就叫編譯時錯誤,這個過程中做的啥類型檢查也就叫編譯時類型檢查,或靜態類型檢查(所謂靜態就是沒把代碼放內存中運行起來,而只是把代碼當作文本來掃描下)。

  • 運行時

所謂運行時就是代碼跑起來了。被裝載到內存中去了。(你的代碼保存在磁盤上沒裝入內存之前是個死家伙。只有跑到內存中才變成活的)。而運行時類型檢查就與前面講的編譯時類型檢查(或者靜態類型檢查)不一樣。不是簡單的掃描代碼。而是在內存中做些操作,做些判斷。

代碼??

為了更加直觀的理解編譯時和運行時的區別,我們看以下代碼:

1 class Program 2 { 3 static void Main(string[] args) 4 { 5 mm a = new mm(); 6 7 nn b = new nn();//實例化一個nn的對象b 8 9 mm c = b; //把mm的對象c指向b 10 11 Console.WriteLine("非虛方法"); 12 13 a.F(); 14 b.F(); 15 c.F(); 16 17 Console.WriteLine("虛方法"); 18 a.G(); 19 b.G(); 20 c.G(); 21 Console.ReadKey(); 22 } 23 } 24 class mm 25 { 26 public void F() 27 { 28 Console.WriteLine("mm.F()"); 29 } 30 31 public virtual void G() //聲明了一個虛方法 32 { 33 Console.WriteLine("mm.G()"); 34 } 35 } 36 class nn : mm 37 { 38 new public void F() //隱藏了父類的F方法 39 { 40 Console.WriteLine("nn.F()"); 41 } 42 43 public override void G() //重寫了方法G 44 { 45 Console.WriteLine("nn.G()"); 46 } 47 }

運行結果截圖如下:

對象a,b沒有問題,但對象c的編譯時類型為mm,那是因為對象a,b,c都是引用類型,運行時類型=編譯時類型,但對于虛方法來說,調用哪個方法取決于該實例運行時的類型。

總結

?2.用運行時常量(readonly)而不是編譯時常量(const)
?? ?運行時常量(readonly)
?? ??? ?不能聲明在方法中
?? ??? ?使用更靈活,便于后期維護
?? ??? ?運行時求值
?? ??? ?能使用任意類型
?? ??? ?二進制層次兼容
?? ?編譯時常量(const)
?? ??? ?可聲明在方法中
?? ??? ?性能優于readonly
?? ??? ?值在目標代碼中替換
?? ??? ?僅能用于基本類型(內建的整數和浮點類型)、枚舉或字符串
?? ??? ?二進制層次不兼容
?? ??? ?在編譯時必須得到確定數值(或永遠都不會改變)時使用,例如attribute的參數和枚舉的定義等

轉載于:https://www.cnblogs.com/hekuerle/p/6773298.html

總結

以上是生活随笔為你收集整理的《Effective C#》读书笔记-1.C# 语言习惯-2.使用运行时常量(readonly)而不是编译时常量(const)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。