C# 字段和屬性
最大的疑惑就是:有了字段,為什麽還要有屬性呢?
如果在一個類中有一個公有字段,那麽在這個類的外部我們可以自由無阻的使用這個字段,但是如果給這個字段賦了一個很“離譜”的值,那這對程序可能會造成很大的影響
比如:
Class Student
{
public int Age;
}
在這個類外我們寫:
Student stu =new Student();
stu.Age = 1000;
眾所周知,人目前是不可能活到1000歲的,但是這樣賦值編譯器又不會報錯(假設外部沒有限制Age取值的邏輯),但是我們知道這個程序運行後的結果是有錯誤的
所以我們有了“屬性”這個東西,代碼可以這樣寫:
class
Student
{
private
int
age;
public
int
Age
{
get
{
return
age; }
set
{
if
(value >= 0 && value <= 100)
{
age = value;
}
else
{
throw
new
Exception(
"Age value has error."
);
}
}
}
這裏的value以為上下文關鍵字了
屬性裏的get,set訪問器可以對字段提供一些安全保護了(個人理解為使用一些邏輯來保護字段的值為“說的過去的”)
---------------------------------------------------------------------------------------------------------------
這是微軟官方C#編程指南裏的對屬性的定義:
“屬性是這樣的成員:它提供靈活的機制來讀取、編寫或計算某個私有字段的值。 可以像使用公共數據成員一樣使用屬性,但實際上它們是稱作“訪問器”的特殊方法。 這使得可以輕松訪問數據,此外還有助於提高方法的安全性和靈活性。”
---------------------------------------------------------------------------------------------------------------
一段總結:
//屬性對外:暴露數據,數據可以是存儲在字段裏的,也可以是動態計算出來的
//對內:保護字段不受“非法值”汙染
//一般情況下,它們都用於表示實體(對象或類型)的狀態
//屬性大多數情況下是字段的包裝器(wrapper)
//建議:永遠使用屬性(而不是字段)來暴露數據,即字段永遠是private或protected的
C# 字段和屬性