.NET 中的 常量字段const應(yīng)用介紹
C#中,當(dāng)使用常數(shù)符號(hào)const時(shí),編譯器首先從定義常數(shù)的模塊的元數(shù)據(jù)中找出該符號(hào),并直接取出常數(shù)的值,然后將之嵌入到編譯后產(chǎn)生的IL代碼中,所以常數(shù)在運(yùn)行時(shí)不需要分配任何內(nèi)存,當(dāng)然也就無法獲取常數(shù)的地址,也無法使用引用了。
如下代碼:
public class ConstTest
{
public const int ConstInt = 1000;
}
將其編譯成ConstTest.dll文件,并在如下代碼中引用此ConstTest.dll文件。
using System;
class Program
{
public static void Main(string[] args)
{
Console.WriteLine(ConstTest.ConstInt);//結(jié)果輸出為1000;
}
}
編譯運(yùn)行此Main.exe程序,結(jié)果輸出為1000。之后將bin文件夾中的ConstTest.dll引用文件刪除,直接運(yùn)行Main.exe文件,程序運(yùn)行正常,結(jié)果輸出1000。
如果將ConstTest重新定義為:
public class ConstTest
{
//只能在定義時(shí)聲明
public const int ConstInt = 1000;
public readonly int ReadOnlyInt = 100;
public static int StaticInt = 150;
public ConstTest()
{
ReadOnlyInt = 101;
StaticInt = 151;
}
//static 前面不可加修飾符
static ConstTest()
{
//此處只能初始化static變量
StaticInt = 152;
}
}
重新編譯成ConstTest.dll并向調(diào)用程序Main添加此引用后,再編譯調(diào)用程序,生成新的Main.exe,即使再次刪除ConstTest.dll文件后,Main.exe運(yùn)行正常,結(jié)果輸出1000。
將Main程序更改如下:
class Program
{
public static void Main(string[] args)
{
Console.WriteLine(ConstTest.ConstInt);//輸出1000
Console.WriteLine(ConstTest.StaticInt);//輸出152
ConstTest mc = new ConstTest();
Console.WriteLine(ConstTest.StaticInt);//輸出151
}
}
重新編譯Main程序,如果此時(shí)再把ConstTest.dll刪除,則會(huì)報(bào)錯(cuò)。
如此可以看出,如果某些工程引用到了ConstTest.dll,如果后來因?yàn)樽儎?dòng),改變了ConstInt常量的值,即使引用重新編譯的ConstTest.dll,也無法更改Main.exe中的數(shù)據(jù)(可以把ConstInt值改為其它值,然后將編譯后的ConstTest.dll拷貝到Main.exe的bin文件夾下試試看),這時(shí),只能添加ConstTest.dll引用,并且重新編譯Main程序才行。
相關(guān)文章
一步步教你在Asp.net Mvc中使用UEditor編輯器
大家都知道ueditor是百度編輯器,目前使用也比較廣泛,下面這篇文章主要是通過一步步的步驟教大家在Asp.net Mvc中使用UEditor編輯器,需要的朋友可以參考借鑒,下面來一起看看吧。2016-12-12.NET使用YARP根據(jù)域名轉(zhuǎn)發(fā)實(shí)現(xiàn)反向代理
這篇文章介紹了.NET使用YARP根據(jù)域名轉(zhuǎn)發(fā)實(shí)現(xiàn)反向代理的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-09-09C#中efcore-ShardingCore呈現(xiàn)“完美”分表
本文簡單的介紹了efcore的分表,著重介紹了efcore下最完美的分表組件ShardingCore,可以幫助大家更好的學(xué)習(xí),感興趣的小伙伴可以參考一下2021-08-08ASP.NET?MVC開發(fā)接入微信公共平臺(tái)
這篇文章主要為大家介紹了微信平臺(tái)開發(fā)ASP.NET?MVC接入微信公共平臺(tái)實(shí)現(xiàn)過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04ASP.NET Web API教程 創(chuàng)建Admin控制器實(shí)例分享
在本文中我們要添加一個(gè)對(duì)產(chǎn)品支持CRUD(創(chuàng)建、讀取、更新和刪除)操作的Web API控制器,需要的朋友可以參考下2012-11-11EF使用數(shù)據(jù)注解特性創(chuàng)建表結(jié)構(gòu)
本文詳細(xì)講解了EF使用數(shù)據(jù)注解特性創(chuàng)建表結(jié)構(gòu)的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03VS2012下QT creator登錄對(duì)話框設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了VS2012下QT creator登錄對(duì)話框的設(shè)計(jì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06