C#基礎知識整理:基礎知識(3) 類的構造

來源:互聯網
上載者:User
我們定義了YSchool,YTeacher類,執行個體化對象時:

            YSchool shool1 = new YSchool();            shool1.ID = 1;            shool1.Name = "清華附中";            YSchool school2 = new YSchool();            school2.ID = 2;            school2.Name = "北師大附中";

這樣寫對不對呢,其實在邏輯上是不正確的,因為執行個體化對象時,它的屬性應該是和執行個體化一起就有的,而不是後來再加屬性。在程式中表現就是,屬性要有初值。
所以,在類中就要有這樣一個方法,無傳回型別,方法名和類名相同,有參數類表或者沒有參數列表。它就是構造方法,俗稱“構造器”或“建構函式”。一個類中可以有一個或多個建構函式,當然有時你沒寫建構函式,這並不代表這個類就沒有建構函式,它依然有一個預設的建構函式的。如果使多個建構函式的話,它們各自的參數列表必須不同。
下面以YSchool為例完善這個類。

  /// <summary>    /// YSchool類的id和name是它的固有屬性,它的值應該是確定的。    /// 執行個體化的同時對屬性賦初值,用到建構函式。    /// </summary>    public class YSchool    {        private int id = 0;        private string name = string.Empty;        public int ID        {            get            {                return this.id;            }        }        public string Name        {            get            {                return name;            }        }        /// <summary>        /// 沒有參數的構造器稱之為“預設構造器”;如果沒有寫一個構造器,那麼        ///系統也會提供一個預設的構造器,所以說類至少有一個構造器;        ///當然,如果系統提供的預設建構函式,則屬性初值為聲明時賦的初值,如果聲明        ///未賦初值,則是“類型預設值”,比如0或者null。        /// </summary>        public YSchool()        {            this.id = 0;            this.name = @"清華附中";        }        /// <summary>        /// 帶有參數列表的建構函式,        /// 屬性的值就是傳入的列表的值。        /// </summary>        /// <param name="id"></param>        /// <param name="name"></param>        public  YSchool(int id, string name)        {            this.id = id;            this.name = name;        }        public  YSchool(int id)        {            this.id = id;            this.name = @"陝科大附中";        }    }
   class Program    {        static void Main(string[] args)        {            YSchool shool1 = new YSchool();            YSchool school2 = new YSchool(1, @"西工大附中");            YSchool school3 = new YSchool(2);            Console.ReadKey();        }    }

上面還修改了id和name的get/set屬性,都改為只有get,因為這些屬性值都是固有屬性,執行個體化之後再賦值也就不符合邏輯了。也就是這些屬性是唯讀。

代碼中提到了預設值,這裡簡單說一下。在聲明欄位的時候,可以用賦值運算子“=”給欄位直接加一個值,比如

    string name = string.Empty;

這個不是給變數賦值,預設值只是一種形式,真正給變數賦值還是在建構函式中。一般規範的代碼都要求聲明變數時要賦初值的。如果生命時沒有賦值的欄位,都會由編譯器增加一句賦值代碼,將該欄位賦值為設定的預設值。其實,無論我們是否給欄位增加了預設值,欄位都具備預設值的,只不過如果我們沒有人為增加預設值,欄位的預設值將是0或null。
這裡還有一點要注意,前面提到過系統預設的建構函式,但是當定義了建構函式後,系統預設建構函式就不存在了。因此如果某些情況下,既要用到預設建構函式和帶參數的建構函式,就要手動定義預設建構函式了。比如,

        public YSchool()        {        }

或者

        public YSchool()        {            this.id = 0;            this.name = @"尚進";        }

綜上所述執行個體化類的規範運算式應該是:類名 執行個體名 = new 類名(建構函式參數列表);

以上就是C#基礎知識整理:基礎知識(3) 類的構造的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.