1字段
字段主要為類的內部做數據交互使用,字段一般為private。
字段可以賦值,可取值。
當字段需要為外部提供數據時,請將字段封裝為屬性,而不是使用公有字段,這是面向對象所提倡的。
2屬性--描述對象的靜態特征
屬性其實是外界訪問私有字段的入口,屬性本身不保存任何數據。
給屬性賦值,其實就是給屬性的私有字段賦值;讀取屬性,其實是獲取屬性指向的私有字段或其他值。
屬性一般是向外部提供數據,主要用來描述對象的靜態特征,所以屬性一般是public的。
屬性可以根據需要設置為只讀、只寫,提高數據安全性。只讀屬性沒有set方法。
屬性內部可以添加需要的邏輯,從而避免非法數據。
3自動屬性
不能直接操作私有字段
不能設置只讀只寫
不能添加驗證邏輯
4方法的定義
概念:對象的動態特征就是方法(靜態特征是屬性),方法表示此對象可以做什么。
類型:實例方法,靜態方法,(構造方法,多態時會用到抽象方法和虛方法)
5方法注意事項
訪問修飾符:默認private
方法名:一般時動詞或動賓短語。首字母大寫。不能以數字開頭。
參數列表:根據需要添加
成員變量==字段,相對與局部變量
6面向對象小結
6.1封裝
封裝:將一個或若干個小對象包裝在一起,然后以一個新的對象呈現
作用:封裝使得一個對象的內部特征變得隱蔽,從而更安全。
類封裝:類是最小的程序單元,是對屬性、方法的封裝,類中的public成員都是對外提供的數據訪問接口。
模塊封裝:類可以被封裝成模塊,組成更大的程序組件。
從OOP理解:外界調用的時候可以不用關心內部實現細節;充分體現面向對象中的“高內聚、低耦合”特性。
對象的重用性:依此封裝,處處使用。
6.2變量
變量作用:指代內存地址,便於記憶。
變量的作用范圍:
局部變量:一個方法內部交換數據,方法執行完畢,如果沒有返回值,則變量很快被清理
成員變量:多個方法內部交換數據,通過對象的屬性外對提供數據,變量的清理不確定
7方法重載
方法重載:編譯器將根據方法參數的個數和類型自動匹配類的對應方法。
方法重載的好處:減少類的對外接口(只顯示一個方法),降低類的復雜度(低耦合);
便於用戶使用(相同功能的方法名稱一樣)和識別
方法重載的條件:方法的名稱必須一樣
方法的參數個數或參數類型不一樣
方法重載的無關性:方法重載與返回值無關。
8靜態方法與重載
關鍵字static:可以修飾類、方法、成員變量,修時候稱之為靜態類、靜態方法、靜態字段。
靜態成員在程序運行時被調入內存中,並且在系統未關閉之前不會被GC吸收。
類的成員使用非常頻繁時,可以考慮使用static修飾,但不要使用過多。
靜態成員不能直接調用實例成員(靜態方法不能直接調用實例方法)。
靜態方法也可以重載。
9構造方法
如果兩個重載的構造方法中有代碼重復,可以用“:this()”調用自身其他構造方法。
10對象初始化器
對象在創建時也可以通過對象初始化器完成“屬性的初始化”。
1 Student objStudent3 = new Student() 2 { 3 StudentId = 10005, 4 Birthday = Convert.ToDateTime("1987-10-11"), 5 StudentName = "小紅" 6 };
對象初始化器和構造方法的異同點
相同點:都可以完成屬性的初始化。
不同點:1構造函數具有強制性,對象初始化器沒有強制性
2對象初始化器只能完成屬性初始化,構造函數可以完成任何需要的初始化工作,如對象創建時讀取文件等
3對象初始化器是在創建對象的時候使用,構造函數寫在類里面
4對象初始化器只能在.NET3.0以后版本使用,構造函數在.NET1.0版本就有
對象創建(new)的兩種方式:構造方法和初始化器。
11對象銷毀
對象的生命周期:對象在內存不斷額“生生死死”,具有生命周期。
對象在內存中的狀態:正在引用 程序正在使用的對象
游離狀態 沒有引用的對象,已經使用完畢但依然占據空間
垃圾回收機制(GC):.NET虛擬機特有機制,自動運行,並檢查對象的狀態。
發現對象不再引用時,會將其釋放所占有的空間(銷毀)。
GC的使用大大減輕了程序員手動釋放對象的操作,且程序運行穩定。
12析構函數
C++中新購函數的使用,當使用delete關鍵字刪除對象時,析構函數會自動調用。
~類名()
{}
托管運行環境下對象的銷毀由虛擬機負責,析構函數沒多大用途。
13對象的數據類型
基本數據類型:int、double、bool等
引用數據類型:數組、對象、string(string分類上屬於引用數據類型,但數據的處理和基本數據類型一樣)
兩個對象,對象1.Name=“王華”; 對象2=對象1; 對象2.Name=“李紅”; 此時對象1.Name也是“李紅”。說明===>>>對象是引用類型。
14兩種數據類型特點
基本數據類型(值類型):值類型變量傳遞時,將自己復制一份賦給了新變量。
引用數據類型(對象類型):引用類型變量傳遞時,將自己的內存地址賦給了新變量。
15 ref關鍵字
值類型在傳遞的過程中都是以副本的方式進行傳遞,使用ref關鍵字可以將值類型變量按照引用類型方式傳遞。
實際開發中不建議經常使用ref關鍵字!
16 out關鍵字
使用out關鍵字可以讓方法有多個返回值
out關鍵字其實也是使用引用類型傳遞!實踐開發中不建議經常使用out關鍵字!
可以使用“字典集合”方式返回多個參數!
/// <summary> /// 對象深拷貝 /// </summary> public class CloneObject { /// <summary> /// 對象深拷貝 /// </summary> /// <typeparam name="T">對象類型</typeparam> /// <param name="obj">對象</param> /// <returns>內存地址不同,數據相同的對象</returns> public static T DeepCopy<T>(T obj) { object retval; using (MemoryStream ms = new MemoryStream()) { BinaryFormatter bf = new BinaryFormatter(); //序列化成流 bf.Serialize(ms, obj); ms.Seek(0, SeekOrigin.Begin); //反序列化成對象 retval = bf.Deserialize(ms); ms.Close(); } return (T)retval; } }
17類和對象小結
17.1封裝的概念和作用:根據需要使用private和public修飾符類修飾類的成員(字段、屬性、方法等),這樣能避免私有的字段和方法被外界使用,我們把這種使用特性稱為封裝。
封裝是一個廣義概念,一個屬性是對字段的封裝,一個方法是對一系列具體實現方式的封裝,一個類是對屬性和方法的封裝,一個模塊組件是對類的封裝。
17.2面向對象編程好處
封裝使得開發人員可以更加關注自己的需求:類的方法實現特定的功能,其他的類可以完全不用關心它是如何實現的,只需要調用即可;團隊開發中,類的編寫者也可以完全不用關心別人是如何使用的。
一個類定義以后,可多次使用,避免重復使用。
17.3類視圖
通過視圖方式展示類的組織結構。私有成員帶一個“鎖”標志。
對類右鍵“查看類圖”。
17.4認識祖先類Object
.NET平台規定:所有類都必須自動繼承自object類。
17.5裝箱與拆箱
裝箱:將值類型轉化為對象的過程 object a=20;
拆箱:將對象類型的變量轉化為值類型的過程 int b=(int)a;
頻繁的拆裝箱操作會影響系統性能。
18.protected關鍵字
protected聲明的字段可以被基類或基類的派生類所引用。
請注意要么在基類中被引用(相當於private),要么是在派生類中被派生類聲明的對象所引用。
在派生類中不能被基類聲明的對象所引用。
