面向對象(基礎oop)之屬性與構造函數

 

    你們好,我叫李京陽,,很高興認識你們,之因此我想開一個本身的博客,就是來把本身所瞭解的知識點經過本身的話寫一下,但願被博客園的朋友們點評和一塊兒討論一下,也但願從博客園中多認識一些軟件開發人員!如今我開始講一下面向對象的一點知識,請大家多多點評和討論!!程序員

 


 

              須要記得:1.在1個項目中 不能 直接訪問 另外的1個項目中的類.
              2.在爲對象的字段賦值的時候.語法上只要賦值的數據和字段的類型一致就能夠.可是絕大多數狀況下.還要考慮實際情理.
                 好比:
                 人對象的age字段 表示1我的的年齡 是int類型
                 語法上只要是1個int類型的數據均可以賦值.
                 可是情理上. 人對象的age 0-130歲.
                 
              3. 爲了情理,咱們有如下的需求
                 爲對象的字段賦值的時候 要求這個值 符合情理. 而不是僅僅知足語法.
                 這個需求是寫類的那我的的需求 而不是建立對象的那我的的需求.
                 解決方案:
                 a. 目的: 當外界爲對象的字段賦值的時候.能夠對這個值作1個邏輯驗證.
                 b. 步驟
                     1). 要保護的字段必須私有化. 由於一旦public 那麼外界就能夠直接訪問這個字段.
                         就能夠直接爲這個賦值,沒法阻攔.
                         
                     2). 可是一旦私有化,外部1點機會都沒有.
                         那麼咱們在類中提供1個爲被保護的字段賦值的方法. SetXX()
                         這個方法接收1個參數,這個參數就是外界要賦值給字段的值.
                         在方法的內部 對這個值進行邏輯驗證. 符合邏輯就將值賦值給字段.
                         不符合邏輯 咱們就作默認處理.
                     3). 在外界若是要爲對象的字段.須要調用這個方法才能夠爲字段賦值.
                     
                     4). 外界若是想要獲得保護的字段的值,那麼再寫1個GetXX方法 用於專門返回被保護的字段的值
                         外界經過調用這個方法 獲得字段的值.
                 
                 c. set 設置
                  get 獲得.
 
                 d. 有同窗犯錯:
                    1). 被保護的字段必定要私有化.
                    2). 在賦值的方法中.是要判斷用戶準備賦值給字段的數據是否符合規範. 而不是判斷字段的值.
             
                 
              4. 在方法中能夠定義1個局部變量的名稱和成員變量的名稱相同 這是能夠滴.
                 爲何? 由於成員變量跟隨着對象一塊兒開闢在堆空間中.
                         而局部變量 在方法被調用的時候 開闢在棧空間中
                         他們就算同名 1個在堆 1個在棧 是不會有任何影響的.
                         
                 若是在方法中直接訪問這個同名成員成員的值 那麼訪問的是局部變量的值.
                 若是咱們就是要訪問這個同名的成員變量. 這個時候能夠經過this關鍵字來點出這個同名成員.
                 
                 this表明:當前對象. this所在的方法屬於哪一個對象,那麼this就表明這個對象.
                 
             
                 總結:
                   1. 當方法中有1個局部變量的名稱和字段的名稱相同.若是咱們要訪問字段.必須加上this
                   2. 其餘狀況下: 寫不寫this關鍵字 指的都是字段.
                      可是建議: 在方法中若是咱們訪問的是對象的成員 建議加上this 方便代碼的閱讀
 
 
                  爲何要保護字段??
                  但願對對象的字段賦值,賦值的這個數據在情理範圍以內。
 
                 使用方法保護字段.
                  a. 將被保護的字段私有化.
                  b. 提供1個Set方法 專門用於爲被保護的字段賦值.
                     在這個方法中驗證 賦值 的數據是否符合規範.
                     若是符合就賦值 若是不符合作默認處理.
                  c. 再提供1個Get方法 專門用於返回被保護的字段的值.
 
 
                  1.屬性
                 做用:和GET,SET方法同樣的,是用來保護字段,只不過屬性的語法更簡潔。
 
                  2.屬性的語法:
                   訪問修飾符 屬性的類型 屬性的名稱
                   {
                     get{}
                     set{}
                   }
 
                 3.如何操做?
                 能夠向操做字段那樣,經過賦值符號直接賦值,或者直接寫上屬性取值。

1.構造函數/構造方法 : 構造函數是一個特殊的方法。
 
2.構造函數的語法:
    a.訪問修飾符大都數狀況下是public。
    b.構造函數沒有返回值,連void都不要寫。
    c.構造函數的名稱與所在的類的名稱一致。
 
3.方法的特色在於,若是方法不調用,那麼方法中的代碼不會被執行。
   構造函數不能被程序猿手動調用。
  
   咱們發現,在建立對象的時候,後面有一個小括弧。
    小括弧的做用:
     a.改變運算的優先級
     b.定義方法
     c.調用方法
     d.強制類型轉換
     e.調用構造函數
 
總結:構造函數在建立雖然不能直接調用,但是能夠經過NEW關鍵字自動調用。
 
4.注意:
   a.構造函數的名稱必定是與所在的類的類名相同。
   b.構造函數與普通的方法的區別
       1)語法上的區別
       2)執行時機
 
5.構造函數其實就是一個特殊的方法
   特殊的地方
   1)語法上的特殊
   2)執行時機的特殊
 
6.普通的方法能夠帶參數,構造函數也是能夠帶參數的。
   在建立對象的時候,後面的小括弧是在調用對象的構造函數,必須在小括弧中爲構造函數定義參數。
   在建立對象的時候,必需要調用構造函數。
 
7.構造函數是能夠重載的,這就意味着在對象中能夠加載多個方法。
   
8.構造函數的做用:
   特色:在於建立對象的時候自動調用。
   做用:若是咱們有一段代碼但願在建立對象的同時就執行,那麼咱們就能夠將這段代碼放在構造函數中。
            可是,通常狀況下,不建議在構造函數中寫一些特別消耗時間和性能的代碼。
   絕大多數狀況下,程序員使用構造函數來初始化當前的屬性的值。
 
9.若是咱們沒有寫構造函數,那麼C#編譯器在編譯的時候,會自動的爲這個類生成一個無參數的,空方法體的構造函數。
   因此咱們這個時候才能夠調用無參數的構造函數來建立對象。
   編譯器自動生成的這個無參數的構造函數來建立對象。
   編譯器自動生成的這個無參數的構造函數,咱們就把它稱爲「隱式構造函數」;
   一旦程序員爲這個類寫了一個構造函數,那麼編譯器就不會自動生成  「隱式構造函數」了。
   若是就是但願存在哪一個無參數,,那麼就須要從新建立一個構造函數。
 
10.構造函數式不能被程序員手動調用,在普通的方法不能調用構造函數,但構造函數能夠調用普通的方法。
     
     構造函數之間能夠相互調用
相關文章
相關標籤/搜索