對象構造者

概述:
  咱們在聲明數組時,能夠同時對其進行初始化,這樣就省去了不少麻煩,可是在建立類的對象時,這招可就不靈了,咱們要麼調用該類的構造函數完成對象的初始化,要麼就手工進行初始化。這兩種方法都不太方便,使用構造函數來對對象進行初始化時,咱們爲了某種靈活性,可能須要編寫構造函數的多個重載版本,實在是麻煩。
  C#3.0中加入的對象構造者特性,使得對象的初始化工做變得格外簡單,咱們能夠採用相似於數組初始化的方式來初始化類的對象,方法就是直接在建立類對象的表達式後面跟上類成員的初始化代碼。

實例代碼:數組

class Point
     {
        public int X  { get; set; }
        public int Y  { get; set; }

        public override string ToString()
         {
            return "(" + X.ToString() + ", " + Y.ToString() + ")";
        }
    }

    class Rectangle
     {
        public Point P1  { get; set; }
        public Point P2  { get; set; }

        public Rectangle()
         {
            P1 = new Point();
            P2 = new Point();
        }
        public override string ToString()
         {
            return "P1: " + P1 + ", P2: " + P2;
        }
    } 
    class ObjectStructurer
     {
        public static void Main()
         {
            Point thePoint = new Point()  { X = 1, Y = 2 };
            Console.WriteLine("Point(X, Y) = {0}", thePoint);

            Rectangle theRectangle = new Rectangle()
             {
                P1 =  { X = 1, Y = 1 },
                P2 =  { X = 100, Y = 200 }
            };
            Console.WriteLine(theRectangle); 
        }
    }

 咱們在定義Point類的X和Y屬性時,只須寫上該屬性的get和set訪問器聲明,C#編譯器會自動爲咱們生成默認的get和set操做代碼,當咱們須要定義簡單屬性時,這個特性很是有用。ide

  咱們以new Point() { X = 1, Y = 2 };語句,輕鬆的完成了對Point類的初始化工做。在建立類的對象時,咱們能夠按照須要去初始化類的對象,只要在類的建立表達式後跟上要初始化屬性的列表便可,且能夠只對須要初始化的屬性賦初值,而無需把全部屬性的初始值都寫上去。函數

  在theRectangle對象的初始化表達式中,咱們首先對P1屬性進行初始化,然而P1屬性也是一個自定義的類型,因此P1屬性的初始化是另外一個類型(Point)的初始化表達式,咱們能夠這樣的方式來對更加複雜的類型進行初始化。對象

相關文章
相關標籤/搜索