讀< >總結(8) 屬性


  屬性看起來像字段,但本質上是方法。使用屬性保持了較好的數據封裝,它使類型的數據字段不會被公開,從而確保了對象的狀態永遠不被破壞。

一,定義屬性

  代碼如下:

public sealed class Employee
    {
        //私有字段(支持字段)
        private string name;
        private int age;

        public string Name
        {
            get//get訪問器
            {
                return name;
            }
            set//set訪問器
            {
                name = value;//value為隱藏字段,總是代表新值
            }
        }

        public int Age
        {
            get
            {
                return age;
            }
            set
            {
                //set訪問器中可以加入判斷邏輯
                if (value < 0 || value > 100)
                {
                    throw new ArgumentOutOfRangeException("value", value.ToString(), "The value must be between 0 and 100!");
                }
                age = value;
            }
        }
    }

二,調用屬性

  代碼如下:

class Program
    {
        static void Main(string[] args)
        {
            Employee e = new Employee();

            e.Name = "Mcgrady";//set員工姓名
            string employeeName = e.Name;//get員工姓名
            Console.WriteLine(employeeName);//顯示"Mcgrady"

            e.Age = 32;//set員工年齡
            e.Age = -5;//拋出ArgumentOutOfRangeException異常
            int employeeAge = e.Age;//get員工年齡
            Console.WriteLine(employeeAge);//顯示"32"
        }
    }

總結:1,可以將屬性想象成智能字段,即背后有額外邏輯的字段。
   2,每個屬性都有一個名稱和一個類型,並且類型不能是void,而且屬性不能重載。
   3,可以定義只讀屬性或只寫屬性。省略set方法表示定義一個只讀屬性,而省略get方法表示定義一個只寫屬性。
   4,編譯器在你指定的屬性名之前附加get_或set_前綴,從而自動生成這些方法的名字。
   5,除了生成訪問器方法,針對源代碼中定義的每一個屬性,編譯器還會在托管程序集(dll)的元數據中生成一個屬性定義項。

三,自動屬性AIP

  自動屬性AIP(Automatically Implemented Property),它是定義屬性的一種更簡潔的方式。例如上面例子中的屬性可以使用自動屬性定義為:

public sealed class Employee
    {
        //自動屬性
        public string Name { get; set; }
        public int Age { get; set; }
    }

  當然它的調用方法和運行結果與普通屬性沒有什么區別。不過需要注意的地方是:

  1,AIP的get和set方法上不能添加斷點,所以不利於調試查錯。
  2,AIP屬性必須同時是可讀和可寫的,也就是說編譯器必然會同時生成get和set方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM