1. 程式人生 > WINDOWS開發 >C#欄位和屬性的區別

C#欄位和屬性的區別

一、c#欄位和屬性的區別與介紹(轉自https://blog.csdn.net/qq_39038038/article/details/80889017)

欄位:

訪問許可權 ? 值型別 ?欄位名?

例如:private int number;

屬性:

public int Number{

? ? get{

?????????return this.number;

????}

????set{

????? ? this.number = value;

????}

}

欄位和屬性的區別。

例子說明:

????????? ? 如果我們有一個公有欄位 如成績的分數(public int score; ),我們可以在類的外部,訪問,修改欄位。但是假如我們給分數 賦值,score = 10000;編譯不會報錯,但是不符合常理。

????????? ? 這裡我們就需要使用屬性來限制?對欄位提供一些安全保護 ?。


private?int?score;
?
????????public?int?Score
????????{
????????????get?{ return?score; }
????????????set?{
????????????????if?(value >= 0 && value <= 100)
????????????????{
????????????????????score = value;
????????????????}
????????????????else
????????????????{
????????????????????throw?new?Exception("score value has error.");
????????????????}
????????????}

總結:屬性裡的get,set訪問器可以對欄位提供一些安全保護了。屬性對外:暴露資料,資料可以是儲存在欄位裡的,也可以是動態計算出來的。對內:保護欄位不受“非法值”汙染。一般情況下,它們都用於表示實體(物件或型別)的狀態。屬性大多數情況下是欄位的包裝器(wrapper)。建議:永遠使用屬性(而不是欄位)來暴露資料,即欄位永遠是private或protected的

二、C#中的欄位與屬性的區別及屬性的作用

public class Employee
{
    //欄位
    private string name;
    //屬性
    public string Name      
    {
        get { return name; }
        set { name = value; }
    }
}

這段程式碼中聲明瞭name欄位和Name屬性,一般來說屬性名是變數名的首字母大寫
屬性的作用是對欄位進行賦值時加以限制,因本段程式碼欄位是姓名所以沒有限制,下面附一段對年齡賦值加以限制的程式碼

public class Employee
{
    //欄位
    private byte age;
    //屬性
    public byte Age      
    {
        get { return age; }
        set {
            if(value >= 18 && value<=60)
                age = value;
        }
    }
}

這段程式碼對age進行了限制,通過Age屬性對age欄位賦值,其值只能在18~60才能賦值成功

下面再貼一段呼叫程式碼

class TestEmployee
{
    static void Main()
    {
        Employee.NumberOfEmployees = 107;
        Employee e1 = new Employee();
        //錯誤,name欄位為private私有欄位
        e1.name = "Claude Vige";
        //正確,Name屬性通過set方法對name欄位賦值
        e1.Name = "Claude Vige";
        //列印輸出e1的姓名,通過Name屬性的get方法返回name的值
        System.Console.WriteLine("Employee name: {0}",e1.Name);
    }
}