你們好,我叫李京陽,,很高興認識你們,之因此我想開一個本身的博客,就是來把本身所瞭解的知識點經過本身的話寫一下,但願被博客園的朋友們點評和一塊兒討論一下,也但願從博客園中多認識一些軟件開發人員!如今我開始講一下面向對象的一點知識,請大家多多點評和討論!!程序員
須要記得: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.構造函數式不能被程序員手動調用,在普通的方法不能調用構造函數,但構造函數能夠調用普通的方法。
構造函數之間能夠相互調用