當前位置:首頁 » 編程軟體 » 只讀欄位的值是在編譯時確定的

只讀欄位的值是在編譯時確定的

發布時間: 2023-01-23 09:11:05

『壹』 c#中的const何readonly關鍵字含義和作用有什麼區別

const 一個包含不能修改的值的變數。
readonly 允許把一個欄位設置成常量,但可以執行一些運算,可以確定它的初始值。

常數表達式是在編譯時可被完全計算的表達式。因此不能從一個變數中提取的值來初始化常量。
如果 const int a = b+1;b是一個變數,顯然不能再編譯時就計算出結果,所以常量是不可以用變數來初始化的。

readonly 是在計算時執行的,當然它可以用某些變數初始化。
readonly 是實例成員,所以不同的實例可以有不同的常量值,這使readonly更靈活。

readonly 關鍵字與 const 關鍵字不同。

1. const 欄位只能在該欄位的聲明中初始化。
readonly 欄位可以在聲明或構造函數中初始化。因此,根據所使用的構造函數,readonly 欄位可能具有不同的值。
2. const 欄位是編譯時常數,而 readonly 欄位可用於運行時常數。
3. const 默認就是靜態的,而 readonly 如果設置成靜態的就必須顯示聲明。
4.const 對於引用類型的常數,可能的值只能是 string 和 null。
readonly可以是任何類型

總結
const只能在初期就使用常量初始化好。對於每一次編譯後的結果,const的值是固定的,而readonly的值是可以在運行的時候才確定值的~~

『貳』 如何理解c#類中的欄位、屬性、方法以及事件

如何理解c#類中的欄位、屬性、方法以及事件?, 如何理解c#類中的(欄位,屬性,方法,事件) 欄位
欄位是被視為類的一部分的對象的實例,通常用於保存類數據。例如,日歷類可能具有一個包含當前日期的欄位。
可以選擇將欄位聲明為 static。這使得調用方在任何時候都能使用欄位,即使類沒有任何實例。
可以將欄位聲明為 readonly。只讀欄位只能在初始化期間或在構造函數中賦值。
static readonly 欄位非常類似於常數,只不過 C# 編譯器不能在編譯時訪問靜態只讀欄位的值,而只能在運行時訪問。
屬性
屬性是類中可以像類中的欄位一樣訪問的方法。屬性可以為類欄位提供保護,以避免欄位在對象不知道的情況下被更改。
屬性使類能夠以一種公開的方法獲取和設置值,同時隱藏實現或驗證代碼。
get 屬性訪問器用於返回屬性值,而 set 訪問器用於分配新值。這些訪問器可以有不同的訪問級別。
value 關鍵字用於定義由 set 索引器分配的值。
不實現 set 方法的屬性是只讀的。
對於不需要任何自定義訪問器代碼的簡單屬性,可考慮選擇使用自動實現的屬性。看個示例:public class userInfo
{
欄位
private string name; 其它類不能訪問
public int age; 其它類可訪問,但既可賦值,也可取值。
屬性
public string Name 其它類可訪問,但只能賦值,不能取值。
{
注釋了get就只能給Name賦值,而不能取值。反之依然
get{return name;}
set
{
TODO:可以調用方法等其它操作。 這里就是一個方法,方法名為set,參數為value;
name=value;
}
}
} .方法
方法定義類可以執行的操作。方法可以接受提供輸入數據的參數,並且可以通過參數返回輸出數據。方法還可以不使用參數而直接返回值。事件
事件向其他對象提供有關發生的事情(如單擊按鈕或成功完成某個方法)的通知。事件是使用委託定義和觸發的。
C#中方法,屬性,欄位,事件,變數,這個幾個概念應該如何理解和區分?
嗯,是有點抽像,我不懂c#,但不僅僅是c#中,別的語言都是一樣的
我打個比方吧:以某人做為比方
方法:某人要去上班,是騎車去,還是步行去,還是坐公交,這裡面你就選擇一樣去上班,此乃方法
屬性:這個人叫小明,而"小明"就是這個人的屬性值,他的名字就是這個人的屬性
欄位:不清楚欄位是c#中的意義,故不作評論
事件:某人去上班,選擇了騎車了去,但還是遲到了,這就是一個「遲到」事件
變數:這個人要上去上班,他需要交通工具,但他的交通工作有自行車,電瓶車,摩托車,所以交通工具是變數
不一定準確,但大同小意,樓主再仔細甄別一下吧
如何理解C# 介面中的方法、屬性、索引器和事件?
打個比方:
你要吃飯---事件
人----類
你這個人---對象
你的嘴----屬性
你吃飯的時候端碗---方法
描述你吃飯是第幾次(第一次吃,第二次吃。。。)---索引
描述動物都能吃飯(但是你用嘴還是用 *** 吃飯他不管)---介面
如何理解VB語言中的屬性方法和事件
1、VB是面向對象的語言,基於對事件編程。 2、一個對象中可以包含屬性、方法,也可以包含事件。
如何理解java中類,變數,方法以及包,介面,常量。
這些東西結合到日程生活中的事物就比較好理解了

類是一個概念的統稱,比如動物,無法具體到是狗,貓還是其他的,再比如說人、植物啊

變數 比如一個小孩,名字叫XX,年齡XX,名字和年齡都可以成為一個變數

方法 比如一個小孩吃飯啊,睡覺啊,這些動作行為都可以稱為一個方法

包,就類似於我們電腦上創建一個文件夾,文件夾里可以再創建文件夾以及文件等等,文件夾就可以稱為一個包

常量,比如居民身份證號,這個居民去辦身份證,派出所給這個居民一個身份證號,這個身份真號就不能再變了,固定了,這個身份證號就可以作為一個常量

介面 比如列印機,可以彩打,也可以黑白打,不管彩打還是黑白打都是用一個列印機實現的,黑白磨和彩墨就相當於介面,你讓列印機選擇了黑白磨就列印出來黑白的,讓列印機選擇彩墨就列印出來彩墨的

如何理解python類中列表的屬性
就比方說 有一個類 叫做 car

這個類的屬性 可以有 color size brand price year 等描述性的東西

這個類的方法 可以是 run s forward backward 等執行性的東西
class car: #定義基本屬性 color = '' size = 0 brand = '' price = 0 year = 0 #定義構造方法 def __init__(self): self.color = color self.size = size self.brand = brand self.price = price self.year = year def run(self): print("the car is running" ) def s(self): print("the car is s" ) def forward(self): print("the car is forward" ) def backward(self): print("the car is backward" )#類調用benz = car('red',1.8T,'Mercedes',400000,2016) benz.run() benz.s() benz.forward() benz.backward()

flash as中的方法和事件如何理解?
術語對菜鳥無益,來比喻吧
方法和事件是對Object物體來說的,就像人有跑走站卧行等動作,類似於方法;也有生長、社交、學習、婚姻等事務,類似於事件
我不能保證是與方法和事件完全對應的。
但方法是物體的行為或功能方面的能力;事件是物體階段或標志性的綜合情況。
如AS中有滑鼠偵聽、鍵盤偵聽、屏幕刷新等事件,又有剪輯屬性、屏幕屬性等功能方法
累死我了。不知道說清沒有
如何動態調用DLL中類的方法以及屬性
在C#中可以通過Assembly來動態載入DLL,然後由它創建類型,接著通過類型的InvokeMember方法來調用DLL中類的方法以及屬性。 為了方便說明一下的方法,先說明一下DLL的代碼,大致如下:using System;namespace clsTestDll{ /<summary> / Summary description for TestDll. /</summary> publilass TestDll { privatestring strName; public TestDll() { TODO: Add constructor logic here strName = ""; } publicstring GetValue( int nCount ) { returnstring.Format( "Count is {0}!", nCount ); } publicstaticstring GetNewValue( int nCount ) { returnstring.Format( "New count is {0}!", nCount ); } publicstring Name { get{ return strName;} set{ strName = value;} } }} 大致的步驟如下:首先載入DLL,具體如下: Load assembly from dll file Assembly assembly = Assembly.LoadFrom( "clsTestDll.dll"); 其次,用載入的assembly來定義指定的類型,例如: Create new type Type t = assembly.GetType( "clsTestDll.TestDll"); 然後就可以通過新建的類型來調用類的方法。 如果是類的靜態方法,可以直接調用,如: Call static member function by name string strReturn = (string) t.InvokeMember("GetNewValue", BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Static | BindingFlags.InvokeMethod, null, null, newobject[]{ 12 } ); 如果是類的非靜態方法或屬性,則需要通過類型,先生成類的對象,如: Create new object of specific class name Object obj = t.InvokeMember( null, BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.CreateInstance, null, null, null ); 接著,就可以通過「obj」對象來進行調用了,如: Call member function by name strReturn = (string) t.InvokeMember("GetValue", BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod, null, obj, newobject[]{ 12 } ); Set class property t.InvokeMember("Name", BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetProperty, null, obj, new Object[] {"Test"} ); Get class property strReturn = (string) t.InvokeMember("Name", BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetProperty, null, obj, null);

『叄』 請問java中的final在C#中對應什麼關鍵字

忘了Java中的final是不是靜態的了...是運行時變數還是編譯時..
如果是靜態並是編譯時,jsjlyf正解
不是靜態的話,static final對應const.
如果不是靜態並且不是編譯時的,對應的是readonly關鍵字
const是編譯時只讀,在編譯時決定類型和值,編譯後就不能改變的.
readonly是運行時只讀,在運行時賦值,比如讀取配置文件之類的,如果是const類型就不可以了.

『肆』 類中常量與只讀欄位的相同點與不同點有哪些

常量和只讀其實都是只能訪問不能修改的。但是他們的賦值時機不太一樣,一般常量在編譯的時候已經確定並賦予其常量值。而只讀其實是一個變數他在運行時需要動態裝載的時候才會給他賦予一個值,而這個值一旦賦予就不能再更改了。
只讀欄位:用readonly修飾符聲明的欄位為只讀欄位,只讀欄位可以是實例欄位或靜態欄位,它只能在欄位聲明中或構造函數中重新賦值,在其它任何地方都不能改變只讀欄位的值。
常量:用const修飾符聲明的欄位為常量,常量只能在聲明中初始化,以後不能再修改。
靜態構造函數:一個類只能有一個靜態構造函數,靜態構造函數前面必須是static,最多隻運行一次,不可以被繼承。靜態構造函數用於初始化任何 靜態 數據,或用於執行僅需執行一次的特定操作。 在創建第一個實例或引用任何靜態成員之前,將自動調用靜態構造函數。
一般來說沒有這樣的區別。
const修飾的說是常量本質上只讀的變數,const修飾的只讀變數不能用來作為定義數組的維數,也不能放在case關鍵字後面。
只讀變數它是個變數,聲明它時,需要給它分配內存空間或者說是緩沖。而常量不是變數,是一個靜態的值,不需要為它分配內存空間。
C語言中定義常量是用enum類型和#define宏。

『伍』 與C++等語言相比,C#中增加的一個類成員訪問修飾符是什麼謝啦

1. C#中類的修飾符:
public—— 表示不限制對該類的訪問,最開放,所有的本程序集以及其他的程序集裡面的對象都能夠訪問
protected ——表示只能從所在類和所在類派生的子類進行訪問
private ——只有其所在類才能訪問
internal ——本程序集內的成員可以訪問
abstract—— 抽象類不允許建立類的實例。修飾方法的時候表示該方法需要由子類來實現,如果子類沒有實現該方法那麼子類同樣是抽象類;且含有抽象方法的類一定是抽象類
sealed——修飾類時表示該類不能夠被繼承,修飾方法時表示該方法不能被覆寫
partial——部分類,可以將一個類分成幾部分寫在不同文件中,最終編譯時將合並成一個文件,且各個部 分不能分散在不同程序集中
static——修飾類時表示該類時靜態類,不能夠實例化該類的對象,既然不能實例化該類,那麼這個類也 就不能夠含有對象成員,即該類所有成員為靜態

2. C#成員修飾符
類的成員包括構造方法、屬性、方法等。
Public:最開放,所有的本程序集以及其他的程序集裡面的對象都能夠訪問。
Protected: 比較開放,自身成員以及子類成員可訪問。
Private:只有自身成員才能夠訪問。
Internal:本程序集內的成員可以訪問。
Abstract:修飾方法的時候表示該方法需要由子類來實現,如果子類沒有實現該方法那麼子類同樣是抽象類;且含有抽象方法的類一定是抽象類
Sealed:修飾類時表示該類不能夠被繼承,修飾方法時表示該方法不能被覆寫。
Static:修飾類成員時,該成員為類成員,只能通過【類.成員名】的方式訪問。當static修飾構造函數時,構造函數不能含有任何參數,不能含有修飾符,構造函數不能對對象成員進 行初始化操作。但是能夠對靜態成員進行初始化或者調用。不能保證他在什麼時候執行,卻能保證在第一次使用類型前執行。在靜態構造函數中初始化的靜態成員為最終初始化結果。
Virtual:修飾方法成員,表示虛方法。父類可以含有該類的實現,子類可以覆寫該函數。
Override:表示該方法為覆寫了父類的方法。
Readonly:修飾欄位,表示該欄位為只讀欄位。readonly修飾引用類型時由於操作不當可能修改該只讀對象狀態。
Const:修飾欄位,表示該欄位為只讀欄位。並且在編譯時必須能夠明確知道該欄位的值,其值是硬編碼到程序中去的,修改了該類型成員後需要重新編譯才能使修改生效。
abstract:用來修飾抽象類,表示該類只能作為父類被用於繼承,而不能進行對象實例化。抽象類可以包含抽象的成 員,但這並非必須。abstract不能和new同時用。
internal: 當一個類或方法沒有被任何修飾符修飾時,默認為internal。

『陸』 C#中const 和 static readonly 區別最好舉個例子

我們都知道,const和static readonly的確很像:通過類名而不是對象名進行訪問,在程序中只讀等等。

在多數情況下可以混用。
二者本質的區別在於,const的值是在編譯期間確定的,因此只能在聲明時通過常量表達式指定其值。而

static readonly是在運行時計算出其值的,所以還可以通過靜態構造函數來賦值。
明白了這個本質區別,我們就不難看出下面的語句中static readonly和const能否互換了:
1. static readonly MyClass myins = new MyClass();
2. static readonly MyClass myins = null;
3. static readonly A = B * 20;
static readonly B = 10;
4. static readonly int [] constIntArray = new int[] {1, 2, 3};
5. void SomeFunction()
{
const int a = 10;
...
}

1:不可以換成const。new操作符是需要執行構造函數的,所以無法在編譯期間確定
2:可以換成const。我們也看到,Reference類型的常量(除了String)只能是Null。
3:可以換成const。我們可以在編譯期間很明確的說,A等於200。
4:不可以換成const。道理和1是一樣的,雖然看起來1,2,3的數組的確就是一個常量。
5:不可以換成readonly,readonly只能用來修飾類的field,不能修飾局部變數,也不能修飾property等

其他類成員。

因此,對於那些本質上應該是常量,但是卻無法使用const來聲明的地方,可以使用static readonly。例

如C#規范中給出的例子:

public class Color
{
public static readonly Color Black = new Color(0, 0, 0);
public static readonly Color White = new Color(255, 255, 255);
public static readonly Color Red = new Color(255, 0, 0);
public static readonly Color Green = new Color(0, 255, 0);
public static readonly Color Blue = new Color(0, 0, 255);static readonly需要注意的一個問

題是,對於一個static readonly的Reference類型,只是被限定不能進行賦值(寫)操作而已。而對其成

員的讀寫仍然是不受限制的。

public static readonly MyClass myins = new MyClass();

myins.SomeProperty = 10; //正常
myins = new MyClass(); //出錯,該對象是只讀的

但是,如果上例中的MyClass不是一個class而是一個struct,那麼後面的兩個語句就都會出錯。

private byte red, green, blue;

public Color(byte r, byte g, byte b)
{
red = r;
green = g;
blue = b;
}
}

在通俗一點說,const類型賦值必須是脫離系統運行時才能初始化的值(const page p=null正確,const page p= new Page()錯誤,因為 new Page()需要運行時才初始化)可以使用static readonly(static readonly page p= new Page())

轉自:: heizhenpeng

『柒』 const和readonly的區別

const:不能是靜態的;值是在編譯時規定的;只能在declaration時候賦值;readonly:可以是靜態的也可以是不靜態的;值是到運行時才規定的;可以在declaration時候賦值,也可以在constructor里賦值。

『捌』 屬性和域

什麼是屬性?
實際是指getter和setter方法,雖然和欄位是兩個概念,姑且可以理解為有getter和setter方法的欄位。
如何聲明?
完整語法:

其中的初始化器、getter和setter方法是可選的。如果沒有自定義getter和setter的實現,就會使用默認的。
以下兩種情況屬性類型也可省略:

兩種屬性:
只讀屬性: val 關鍵字聲明
可變屬性: var 關鍵字聲明
訪問屬性:
訪問屬性使用點操作符, 對象名.屬性名 ,如:

如果要修改訪問器的可見性或添加註解,但又不需要修改默認實現,你可以重新定義方法,但不定義它的實現,這樣仍然是使用默認實現。 如:

Kotlin類不能擁有域變數(也就是Java中的成員變數),但是使用訪問器時又需要這種域變數,所以Kotlin提供了後端域變數,可以用 field 標識符來訪問。
如:

什麼情況下會生成後端域變數?

下面這種情況下就不會生成後端域變數:

為什麼不用 this 關鍵字訪問屬性呢?
試想下, this 代表當前對象,而上面說過通過點操作符,訪問屬性時,實際上是調用了訪問器,在訪問器內部實現中再調用訪問器就會出現無限遞歸。所以,通過Backing Filed可以避免這個問題。

如果你的操作是想訪問屬性內部的屬性,或者集合裡面的元素,而不是屬性本身,那麼你可以聲明這個屬性為 private 的(後端屬性),然後定義個 public 的屬性並自定義其訪問器,在自定義的訪問器內部訪問後端屬性。如:

值在編譯期就能確定的屬性,用 const 關鍵字修飾。滿足以下條件的屬性可以標記為編譯器常數值:

如:

編譯器常數值可以用在註解內:

通常屬性被聲明為非 null 類型就必須就地初始化。但是,這種限制在很多情況下是不方便的,比如,聲明的屬性通過依賴注入的方式來初始化。這種情況下,你就可以使用 lateinit 關鍵字來修飾聲明的屬性。
如:

使用限制:

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:710
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:972
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:681
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:833
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:741
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1081
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:312
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:192
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:879
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:837