1樓:匿名使用者
public const double pi = 3.1415926;
只是圓周率的話,直接使用 math.pi 更方便些
c#裡如何定義常量集合
2樓:陽光的雷咩咩
3樓:匿名使用者
在程式裡用dictionary,如果用作外部檔案可以用ini或xml都可以
c#介面中怎麼定義常量啊?
4樓:go陌小潔
c#中定義常量的方式有兩種,一種叫做靜態常量(***pile-time constant),另一種叫做動態常量(runtime constant)。前者用「const」來定義,後者用「readonly」來定義。 對於靜態常量(***pile-time constant),它的書寫方式如下:
public static const int max_value = 10;
用const定義的常量,對於所有類物件而言都是一樣的,因此需要像訪問靜態成員那樣去訪問const定義的常量,而用物件的成員方式去訪問會出變異錯誤。此外,對於靜態常量的訪問在編譯的時候,是用常量的值去替換常量,例如:
int nvalue = max_value;
這句在編譯之後,和如下這句所產生的中間語言**是一樣的。
int nvalue = 10;
不過,在用const來定義常量的時候,在型別上有很多限制。首先,此型別必須屬於值型別,同時此型別的初始化不能通過new來完成,因此一些用struct定義的值型別常量也不能用const來定義。
相對於const而言,用readonly來定義常量要靈活的多,它的書寫方式如下:
public readonly int max_value = 10;
為什麼稱為動態變數,因為系統要為readonly所定義的常量分配空間,即和類的其他成員一樣擁有獨立的空間。此外,readonly所定義的常量除了在定義的時候可以設定常量值外,還可以在類的建構函式中進行設定。由於readonly所定義的常量相當於類的成員,因此使用const來定義常量所受到的型別限制,在使用readonly去定義的時候全部消失,即可以用readonly去定義任何型別的常量。
綜合上面所述,至於對比兩者之間的區別具體如下。
靜態常量(***pile-time constant) 動態常量(runtime constant)
定義宣告的同時要設定常量值。宣告的時候可以不需要進行設定常量值,可以在類的建構函式中進行設定。
型別限制
首先型別必須屬於值型別範圍,且其值不能通過new來進行設定。 沒有限制,可以用它定義任何型別的常量。
對於類物件而言 對於所有類的物件而言,常量的值是一樣的。 對於類的不同物件而言,常量的值可以是不一樣的。 記憶體消耗無。 要分配記憶體,儲存常量實體。
綜述效能要略高,無記憶體開銷,但是限制頗多,不靈活。 靈活,方便,但是效能略低,且有記憶體開銷。
對於在定義常量的時候,到底是用const來定義還是readonly來定義,我以前為了追求效能,因此儘量用const來定義。但是在此書中,提到了一個關於使用const會產生潛在的bug。就是在程式中使用dll類庫某個類的靜態常量時,如果在類庫中修改靜態常量的值,其它介面沒有發生變化,一般來說,程式呼叫端是不需要重新編譯,直接執行就可以呼叫新的類庫。
不過就是在此情況下,會產生潛在的bug。這是由於靜態常量在編譯的時候,是用它的值去替換常量,因此在呼叫端的程式也是這樣進行替換的。例如:
在類庫中定義了一個靜態常量,如下:
public const int max_value = 10;
那麼對於程式中呼叫此靜態常量這段**,在編譯後產生的中間語言**中,是用10來進行替換,即使用靜態常量的地方,改為10了。 那麼當類庫的靜態變數發生變化後,例如:
public const int max_value = 15;
那麼對於呼叫端程式是可以在沒有重新編譯的情況下進行執行,不過此時程式的中間語言**對應於靜態變數的值是10,而不是新類庫中的15。因此這樣產生的不一致,程式會引發潛在的bug。解決此類問題的方法,就是呼叫端程式在更新類庫之後重新編譯一下,即生成新的中間語言**。
對於如上在const定義常量時所存在的潛在bug,在用readonly定義常量時是不會發生的。因為readonly定義的常量類似於類的成員,因此在訪問的時候需要根據具體常量地址來訪問,從而避免此類bug。
5樓:魔淚無痕
const 是定義常量的關鍵字,定義常量和定義變數唯一的不同就是多加一個const。
如,int i=1;//定義並賦值一個變數const int i=5;//定義一個常量並賦值。
定義常量時必須同時對常量賦值,但定義變數時可不用賦值。
6樓:匿名使用者
介面,不可以定義欄位!
7樓:匿名使用者
主要是const標識 例:const int max_value = 10;
8樓:
private readonly const string str="123"; 宣告一個值為123的常量
c# 中如何宣告一個靜態常量?
9樓:
常量隱含著就是靜態的,所以,不用特別說明 static.
**改為這樣:
class program
{public const string success = "1";
.........
10樓:匿名使用者
c#擁有兩種不同的常量:靜態常量(***pile-time constants)和動態常量(runtime constants)。它們有不同的特性,錯誤的使用不僅會損失效率,還可能造成錯誤。
相比之下,靜態常量在速度上會稍稍快一些,但是靈活性卻比動態常量差很多。
//靜態常量(隱式是靜態的)
public const int ***piletimeconstant = 1;
//動態常量
public static readonly runtimeconstant = 1;
靜態常量在編譯時會將其替換為所對應的值,也就是說下面這2句話通過編譯器編譯後產生的il是一樣的。
//通過編譯後二者會被翻譯成相同的中間語言
int mynum = ***piletimeconstant;
int mynum = 1;
動態常量的值是在執行時獲得的。il中將其標為只讀常量,而不是用常量的值代替。
靜態常量只能被宣告為簡單的資料型別(內建的int和浮點型)、列舉或字串。下面的程式段是通不過編譯的。你不能用new關鍵字初始化一個靜態常量,即便是對一個值型別來說。
//這樣是錯誤的
public const datetime mydatetime = new datetime(2006,9,1,0,0,0);
//這樣是可以的
public static readonly datetime mydatetime = new datetime(2006,9,1,0,0,0);
只讀資料也是常量的一種,它們不能在構造器初始化之後被修改。但是它同靜態常量不同,它的值是在執行時才被指派的,因此就會獲得更大的靈活性。動態常量可以是任意的資料型別。
二者最大的差別在於:靜態常量在編譯時會將其換為對應的值,這就意味著對於不同的程式集來說,當你改變靜態常量的時候需要將其重新編譯,否則常量的值不會發生變化,可能引發潛在的問題,而動態常量就不會有這種情況。
用const定義的常量(隱式是靜態的),需要像訪問靜態成員那樣去訪問const定義的常量,而用物件的成員方式去訪問會出編譯錯誤。 宣告的同時要設定常量值。
從另一方面來說,如果你的確要宣告一些從不改變且處處唯一的常量,例如鉤子函式setwindowshookex的idhook引數或序列化時的版本等,就應該使用靜態常量。但是用到這樣的常量的機會不多。一般來說我們應該使用靈活性更高的動態常量。
靜態常量 動態常量
記憶體消耗 無 因為要儲存常量 有消耗
初始化 很少的簡單型別, 任意型別,可以在類建構函式中賦值
不能new,必須在
宣告同時賦值
何時發揮作用 編譯時進行替換 相當於類中的資料成員
11樓:『戀愛領域
你申明的這個靜態變數在哪申明的?必須在類裡!
12樓:匿名使用者
const就是靜態常量
C如何定義類型別的陣列,C 中如何定義類的陣列,以及給他們賦值?
student 學生物件的陣列 liststu new list 學生物件的集合 c 中自定義類陣列和結構陣列的使用 發現很多時候給定的陣列要實現某個邏輯或處理很是麻煩,一維陣列,二維陣列,等等需要經過n多轉換,還不如自己寫一個自定義陣列,既方便又節省時間,以下是類陣列,其實相當於定義了一個實體類一...
在C中怎麼定義int的長度
int 關鍵字表示一種整型,該型別根據下表顯示的大小和範圍儲存值。範圍 2,147,483,648 到 2,147,483,647 大小 有符號 32 位整數 可以宣告並初始化 int 型別的變數,例如 int i 123 如果整數沒有字尾,則其型別為以下型別中可表示其值的第一個型別 int uin...
排序並插入題目內容編寫程式,在主函式中定義有
include define n 10 函式前置宣告 int sortarr int p,int n int printarr int p,int n 氣泡排序 int sortarr int p,int n return 0 列印陣列 int printarr int p,int n printf...