屬性
在 C# 中,屬性是類、struct,或接口的命名成員,它提供了一種簡潔的途徑,可以通過所謂的 get 和 set 訪問器方法訪問私有字段。
下面的代碼片斷為類 Animal 聲明了一個名為 SpecIEs 的屬性,它抽象了對名為 name 的私有變量的抽象訪問:
public class Animal
{
private string name;
public string SpecIEs
{
get
{
return name;
}
set
{
name = value;
}
}
}
通常,屬性與它訪問的內部成員有相同的名稱,但是屬性以大寫字母開頭(例如上面的示例中的 Name),或者內部成員帶有“_”前綴。同時還需要注意 set 訪問器中所用的名為 value 的隱式參數 — 這種參數具有基礎成員變量類型。
實際上,訪問器在內部表示成 get_X() 和 set_X() 方法,從而與 .NET 語言保持兼容,因為 .Net 語言並不支持訪問器(如本文前面的 typeOf 和 GetType() 部分中的屏幕截圖所示)。一旦定義好屬性,就可以非常容易地獲取或設置它的值:
Animal animal = new Animal()
// Set the property
animal.SpecIEs = "Lion";
// Get the property value
string str = animal.SpecIEs;
如果屬性只有 get 訪問器,它就是一個只讀屬性。如果它只有 set 訪問器,它就是一個只寫屬性。如果兩者都有,則它是一個可讀寫屬性。
結構
C# 支持 struct 關鍵字,它是源於 C 的另一個項,但是不可用於 Java。可以將 struct 看作是一個輕量級類。它可以采用與類大致相同的方式包含構造函數、常量、字段、方法、屬性、索引器、運算符和嵌套類型。structs 不同於類,因為它們不能是抽象的,並且不支持實現繼承。結構與類還有一點重要的不同,結構是值類型的,而類是引用類型的。在構造函數的工作方式上,結構也有所不同。特別是,編譯器總是提供默認的不帶參數的構造函數,並且不允許您替換它。
在下面的示例中,我們使用 new 關鍵字並且通過初始化實例的成員初始化了一個 struct:
using System;
public struct CustomerStruct
{
public int ID;
public string name;
public CustomerStruct(int customerID, string customerName)
{
ID = customerID;
name = customerName;
}
}
class TestClass
{
public static void Main(string[] args)
{
// Declare a CustomerStruct using the default constructor
CustomerStruct customer = new CustomerStruct();
Console.WriteLine("Struct values before initialization");
Console.WriteLine("ID = {0}, Name = {1}", customer.ID,
customer.name);
customer.ID = 100;
customer.name = "Robert";
Console.WriteLine("Struct values after initialization");
Console.WriteLine("ID = {0}, Name = {1}", customer.ID,
customer.name);
}
}
當我們編譯並運行上面的代碼時,它的輸出顯示,該結構的變量在默認情況下是已初始化的。int 變量初始化為 0,而字符串變量初始化為空字符串:
初始化前的 struct 變量
ID = 0, Name =
初始化後的 truct 值
ID = 100, Name = Robert
注意,當我們使用另一種表示法(CustomerStruct customer)聲明 customer 時,它的成員變量將不被初始化,因此,如果試圖在為它們賦值前使用它們,將會產生編譯時錯誤。