欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#中 const 和 readonly 的不同

 更新時(shí)間:2013年04月24日 15:29:55   作者:  
const 和 readonly 的區(qū)別,總是不太清楚,于是查了查資料。

  const 的概念就是一個(gè)包含不能修改的值的變量。
常數(shù)表達(dá)式是在編譯時(shí)可被完全計(jì)算的表達(dá)式。因此不能從一個(gè)變量中提取的值來初始化常量。
如果 const int a = b+1;b是一個(gè)變量,顯然不能再編譯時(shí)就計(jì)算出結(jié)果,所以常量是不可以用變量來初始化的。


readonly 允許把一個(gè)字段設(shè)置成常量,但可以執(zhí)行一些運(yùn)算,可以確定它的初始值。
因?yàn)?readonly 是在計(jì)算時(shí)執(zhí)行的,當(dāng)然它可以用某些變量初始化。
readonly 是實(shí)例成員,所以不同的實(shí)例可以有不同的常量值,這使readonly更靈活。


readonly 關(guān)鍵字與 const 關(guān)鍵字不同。

1. const 字段只能在該字段的聲明中初始化。
   readonly 字段可以在聲明或構(gòu)造函數(shù)中初始化。因此,根據(jù)所使用的構(gòu)造函數(shù),readonly 字段可能具有不同的值。
2. const 字段是編譯時(shí)常數(shù),而 readonly 字段可用于運(yùn)行時(shí)常數(shù)。
3. const 默認(rèn)就是靜態(tài)的,而 readonly 如果設(shè)置成靜態(tài)的就必須顯示聲明。
4.const 對(duì)于引用類型的常數(shù),可能的值只能是 string 和 null。
   readonly可以是任何類型

* 需要注意的一個(gè)問題是:

對(duì)于一個(gè) readonly 的 Reference 類型,只是被限定不能進(jìn)行賦值(寫)操作而已。而對(duì)其成員的讀寫仍然是不受限制的。

復(fù)制代碼 代碼如下:

public static readonly Class1 my = new Class1();

my.SomeProperty = 10;//正常
my = new Class1(); //出錯(cuò),該對(duì)象是只讀的

但是,如果上例中的 Class1 不是一個(gè) Class 而是一個(gè) struct,那么后面的兩個(gè)語句就都會(huì)出錯(cuò)。

static readonly:

Java 中 static 是當(dāng)載入一個(gè)類時(shí)執(zhí)行一次的。

C#中是怎么執(zhí)行的,我沒有查到。很奇怪幾乎每本java的書都會(huì)說static的問題,C#的往往只說怎么用,但是應(yīng)該是在main函數(shù)調(diào)用之前初始化,所以static readonly也是運(yùn)行時(shí)的,可以用變量付值,如:

private static readonly string path = System.Windows.Forms.Application.StartupPath + “aaa”;

相關(guān)文章

  • c#程序定期把內(nèi)存信息記錄到log日志示例

    c#程序定期把內(nèi)存信息記錄到log日志示例

    這篇文章主要介紹了c#程序定期把內(nèi)存信息記錄到log日志示例,需要的朋友可以參考下
    2014-04-04
  • C# 中的IComparable和IComparer的使用及區(qū)別

    C# 中的IComparable和IComparer的使用及區(qū)別

    這篇文章主要介紹了C# 中的IComparable和IComparer的使用及區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 詳解C# TimeSpan 計(jì)算時(shí)間差(時(shí)間間隔)

    詳解C# TimeSpan 計(jì)算時(shí)間差(時(shí)間間隔)

    本篇文章主要介紹了C# TimeSpan 計(jì)算時(shí)間差(時(shí)間間隔),非常具有實(shí)用價(jià)值,需要的朋友可以參考下。
    2016-12-12
  • C#中增強(qiáng)類功能的幾種方式詳解

    C#中增強(qiáng)類功能的幾種方式詳解

    這篇文章主要給大家介紹了關(guān)于C#中增強(qiáng)類功能的幾種方式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • C#控制臺(tái)程序輸出等腰三角形并居中顯示實(shí)例

    C#控制臺(tái)程序輸出等腰三角形并居中顯示實(shí)例

    這篇文章主要介紹了C#控制臺(tái)程序輸出等腰三角形并居中顯示實(shí)例,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-03-03
  • C#代碼實(shí)現(xiàn)PDF文檔操作類

    C#代碼實(shí)現(xiàn)PDF文檔操作類

    本篇文章給大家介紹使用pdf文檔操作C#代碼,本文代碼非常簡單,代碼附有注釋,需要注意的是:需要添加itextsharp.dll引用才可以正常通過編譯,感興趣的朋友可以參考下
    2015-10-10
  • C# DataTable的詳細(xì)用法分享

    C# DataTable的詳細(xì)用法分享

    在項(xiàng)目中經(jīng)常用到DataTable,如果DataTable使用得當(dāng),不僅能使程序簡潔實(shí)用,而且能夠提高性能,達(dá)到事半功倍的效果,現(xiàn)對(duì)DataTable的使用技巧進(jìn)行一下總結(jié)
    2013-11-11
  • C#使用log4net記錄日志的方法步驟

    C#使用log4net記錄日志的方法步驟

    本文主要介紹了C#使用log4net記錄日志的方法步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C#中ManualResetEvent實(shí)現(xiàn)線程的暫停與恢復(fù)

    C#中ManualResetEvent實(shí)現(xiàn)線程的暫停與恢復(fù)

    本文主要介紹了C#中ManualResetEvent實(shí)現(xiàn)線程的暫停與恢復(fù),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 詳解C#開發(fā)Android應(yīng)用程序的流程

    詳解C#開發(fā)Android應(yīng)用程序的流程

    在本篇文章里小編給大家分享了關(guān)于C#開發(fā)Android應(yīng)用程序的流程和相關(guān)技巧,需要的朋友們跟著學(xué)習(xí)下。
    2019-03-03

最新評(píng)論