屬性,官方的解釋是:它提供靈活的機制來讀取、編寫或計算某個私有欄位的值。
可以像使用公共資料成員一樣使用屬性,但實際上它們是稱作「訪問器」的特殊方法。
這使得可以輕鬆訪問資料,此外還有助於提高方法的安全性和靈活性。我們可以簡單的理解成它是訪問類中私有成員的一種工具。類中個private的成員不能直接在外部訪問,我們呼叫他們的一種方法是通過類中的成員函式,還有一種方法就是通過屬性。屬性中有get(用於返回屬性值)方法和set(用於分配新值)方法。下面我們看乙個簡單的例子:
using system;
using system.collections.generic;
using system.linq;
using system.text;
class myclass
set }}
class test
一如我們期待的那樣,程式輸出0 1。我們可以看到屬性通過對方法的包裝向程式設計師提供了乙個友好的域成員的訪問介面。這裡的value是c#的關鍵字,是我們進行屬性操作時的set的隱含引數,也就是我們在執行屬性寫操作時的右值。
屬性提供了唯讀(get),只寫(set),讀寫(get和 set)三種介面操作。對域的這三種操作,我們必須在同乙個屬性名下宣告,而不可以將它們分離,看下面的實現:
class myclass }
public string name }
} 上面這種分離name屬性實現的方法是錯誤的!我們應該像前面的例子一樣將他們放在一起。值得注意的是三種屬性(唯讀,只寫,讀寫)被c#認為是同乙個屬性名,看下面的例子:
class myclass }
} class myclassderived: myclass }
} class test }
我們可以看到myclassderived中的屬性num-get{}遮蔽了myclass中屬性num-set{}的定義。
當然屬性遠遠不止僅僅限於域的介面操作,屬性的本質還是方法,我們可以根據程式邏輯在屬性的提取或賦值時進行某些檢查,警告等額外操作,看下面的例子:
class myclass
set }
} 由於屬性的方法的本質,屬性當然也有方法的種種修飾。屬性也有5種訪問修飾符,但屬性的訪問修飾往往為public,否則我們也就失去了屬性作為類的公共介面的意義。除了方法的多引數帶來的方法過載等特性屬性不具備外, virtual, sealed, override, abstract等修飾符對屬性與方法同樣的行為,但由於屬性在本質上被實現為兩個方法,它的某些行為需要我們注意。看下面的例子:
abstract class a }
public virtual int y
set
} public abstract int z
} class b: a }
public override int y }
public override int z
set
} }
這個例子集中地展示了屬性在繼承上下文中的某些典型行為。這裡,類a由於抽象屬性z的存在而必須宣告為abstract。子類b中通過base關鍵字來引用父類a的屬性。類b中可以只通過y-set便覆蓋了類a中的虛屬性。
靜態屬性和靜態方法一樣只能訪問類的靜態域變數。我們也可以像做外部方法那樣,宣告外部屬性。
C 中的屬性
1.屬性就是對字段的封裝,其本質就是乙個get方法和乙個set方法。value是個關建字,它其實就是乙個引數,用來指代使用者輸入的內容。using system namespace 2019 10 26set public int age set 2.即使不需要做任何邏輯驗證,也不能把字段宣告稱pu...
C 中的屬性
屬性是代表類的例項或類中的乙個資料項的成員。屬性指的是一組兩個匹配的 稱為訪問器的方法 public 返回型別 識別符號 set訪問器總是 get訪問器總是 屬性跟字段的相同點 屬性跟字段的不相同點 訪問器的重點如下 寫入和讀取屬性的訪問器時,會被隱式呼叫 注意 不能顯式地呼叫訪問器,就跟呼叫函式那...
C 列舉Flag屬性的應用
直接上 using system using static system.console namespace firstdotnetcorepro public enum daysofweek 如果將上述 執行則在控制台會輸出 96。因為列舉型別也是值型別,當進行或操作的時候實際上是對應的數值進行了...