當前位置:編程學習大全網 - 編程語言 - C#屬性、字段、變量

C#屬性、字段、變量

c#的字段就是指私有域(變量)

class A

{

int i;

public int I

{

get{....}

set{....}

}

}

其中,i是字段,I是屬性,

字段是屬於壹個類的,在類中定義(註意:是類中,而不是類中的某個方法或屬性中)

在本類中可以用

this.字段名訪問

且本類中的所有屬性、方法等都可以訪問

也就是說它的作用域是整個類。

而局部變量是屬於壹個函數或語句塊的

它的作用域是從定義開始,到離開語句塊。

C#中的變量、字段、域、屬性、屬性過程

在C#中:

域: 表示與對象或類相關聯的變量,修飾符不論是不是public。(與字段類似)

字段: 表示與對象或類相關聯的變量。通常來講修飾符是public的成員變量稱為字段,而private更適合說是局部變量。(與域類似)

屬性: 表示域或字段的自然擴展,使得在保證封裝性的基礎上實現了訪問私有成員的便捷性。

域表示與對象或類相關聯的變量,聲明格式如下:

attributes field-modifiers type variable-declarators;

域的修飾符field-modifiers可以是:new、public、protected、internal、private、static、readonly。實際上,域相當於C++中的簡單成員變量。在下面的代碼中,類A包含了三個域:公有的X和Y,以及私有的z。

class A

{

public int x;

public string y;

private float z;

}

字段

字段是與對象或類相關聯的變量。

當壹個字段聲明中含有static修飾符時,由該聲明引入的字段為靜態字段(static field)。它只標識了壹個存儲位置。不管創建了多少個類實例,靜態字段都只會有壹個副本。

當壹個字段聲明中不含有static修飾符時,由該聲明引入的字段為實例字段(instance field)。類的每個實例都包含了該類的所有實例字段的壹個單獨副本。

在下面的示例中,Color類的每個實例都有r,g,b實例字段的不同副本,但是Black,White,Red,Green和Blue等靜態字段只有壹個副本:

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);

private byte r, g, b;

public Color(byte r, byte g, byte b) {

this.r = r;

this.g = g;

this.b = b;

}

}

如示例所示,通過readonly修飾符聲明只讀字段。給readonly字段的賦值只能作為聲明的組成部分出現,或者在同壹類中的實例構造函數或靜態構造函數中出現。

屬性

為了類的封裝性,壹般是把字段設為Private, 把屬性設為公有來操作字段。

屬性(property)是字段的自然擴展,兩者都是具有關聯類型的命名成員,而且訪問字段和屬性的語法是相同的。然而,屬性與字段不同,不表示存儲位置。相反,屬性有訪問器(accessor),這些訪問器指定在它們的值被讀取或寫入時需執行的語句。

屬性的聲明類似於字段,不同之處在於屬性的聲明以定界符{}之間的get訪問器和/或set訪問器結束,而不是分號。同時包含get訪問器和set訪問器的屬性稱為讀寫屬性(read-write property)。只具有get訪問器的屬性稱為只讀屬性(read-only property)。只具有set訪問器的屬性稱為只寫屬性(write-only property)。

get訪問器相當於壹個具有屬性類型返回值的無參數方法。除了作為賦值的目標外,當在表達式中引用屬性時,會調用該屬性的get訪問器以計算該屬性的值。

set訪問器相當於壹個具有單個名為value的參數和無返回類型的方法。當壹個屬性作為賦值的目標,或者作為++或--運算符的操作數被引用時,就會調用set訪問器,所傳遞的自變量將提供新值。

List類聲明了兩個屬性Count和Capacity,依次是只讀和只寫的。下面是使用這些屬性的示例:

List names = new List();

names.Capacity = 100; //調用set訪問器

int i = names.Count; //調用get訪問器

int j = names.Capacity; //調用get訪問器

與字段和方法類似,對於實例屬性和靜態屬性,C#兩者都支持。靜態屬性是聲明中具有static修飾符,而實例屬性則沒有。

屬性的訪問器可以是虛擬的。當屬性聲明中包含virtual,abstract,override修飾符時,它們將運用到屬性訪問器。

來自MSDN中的內容:

屬性與字段

屬性與字段都可在對象中存儲和檢索信息。它們的相似性使得在給定情況下很難確定哪個是更好的編程選擇。

在以下情況下使用屬性過程:

1. 需要控制設置或檢索值的時間和方式時。

2. 屬性有定義完善的壹組值需要進行驗證時。

3. 設置值導致對象的狀態發生某些明顯的變化(如 IsVisible 屬性)。

4. 設置屬性會導致更改其他內部變量或其他屬性的值時。

5.必須先執行壹組步驟,然後才能設置或檢索屬性時。

在以下情況下使用字段:

1. 值為自驗證類型時。例如,如果將 True 或 False 以外的值賦給 Boolean 變量,就會發生錯誤或自動數據轉換。

2. 在數據類型所支持範圍內的任何值均有效時。Single 或 Double 類型的很多屬性屬於這種情況。

3. 屬性是 String 數據類型,且對於字符串的大小或值沒有任何約束時。

Visual Basic中屬性和變量的差異(在C#中應該也是壹樣的)

變量和屬性都表示可以訪問的值。但在存儲和實現方面有所不同。

變量

變量 直接對應於內存位置。可以使用單個聲明語句定義變量。變量可以是“局部變量”,在過程中定義且僅可用於該過程;它也可以是“成員變量”,在模塊、類或結構中定義,但不在任何過程中定義。成員變量又稱“字段”。

屬性

屬性 是在模塊、類或結構中定義的數據元素。使用 Property 和 End Property 語句之間的代碼塊定義屬性。此代碼塊包含壹個 Get 過程t或壹個 Set 過程,或兩者都包含。這兩個過程稱為“屬性過程”或“屬性訪問器”。除了檢索或存儲屬性的值外,它們還可以執行自定義操作,如更新訪問計數器。

不同點

下表指出了變量和屬性之間的壹些重要差異。

差異點 變量 屬性

聲明 單個聲明語句 代碼塊中的壹系列語句

實現 單個存儲位置 可執行代碼(屬性過程)

存儲 直接與變量的值關聯 通常包含內部存儲;在屬性的包含類或模塊外部,這些內部存儲不可用屬性的值可能作為也可能不作為壹個存儲元素(見下(1))

存在可執行代碼 無 至少必須有壹個過程

讀寫訪問權限 讀/寫或只讀 讀/寫、只讀或只寫

自定義操作 不可能 可以當作部分設置或檢索屬性值執行

註解:(1)和變量不同,屬性的值可能不直接對應於單個存儲項。為方便或安全起見,存儲可能拆分為幾塊;也可能以加密格式存儲值。在這些情況下,Get 過程將匯編這些塊或解密存儲值,然後 Set 過程會加密新值或將其拆分到構成存儲的各個組成部分中。屬性值可以是臨時的,如壹天中的某個時間,在這種情況下,每次訪問此屬性時,Get 過程將及時計算此屬性。

類與模塊之間的差異

類和模塊之間的主要差異在於:類可以實例化為對象,而標準模塊則不能。

  • 上一篇:CB和CS有什麽區別?
  • 下一篇:加工中心編程哪家專業?
  • copyright 2024編程學習大全網