NET的魅力
-
- 面向對象四大優點
- 復用性
- 擴展性
- 維護性
- 靈活性
- 強大的Web支持
- 支持雲計算
- 復用性
- 面向對象四大優點
- .NET框架結構
- .NET
- 公共語言運行時(CLR)
- CTS:語法和數據類型各不相同
- CLS:成為公共語言規范
- 框架類庫(FCL)
- 是一個綜合性的面向對象的可重要類型集合
- 公共語言運行時(CLR)
- .NET
- 類和對
- 類和對象本質上的區別,類定義了一組概念的模型,而對象是真實的實體
- 類是概念
- 對象是實體
- 關系
- 由對象歸納為類,是歸納對象共性的過程
- 在類的基礎上,將狀態和行為實體化對象的過程稱之為實例化
- 封裝——面向對象三大特征之一
- 封裝又稱為信息隱藏:是指利用抽象數據類型講數據的操作結合在一起,使其構成
- 一個不可分割的獨立實體
- 隱藏內部的細節
- 保留對外的接口
- 封裝帶來的好處
- 保證數據的安全性
- 提供清晰的對外接口
- 類內部實現可以任意修改,不影響其他類
- 類是最基本的封裝
- 封裝又稱為信息隱藏:是指利用抽象數據類型講數據的操作結合在一起,使其構成
總結
- 類和對象本質上的區別,類定義了一組概念的模型,而對象是真實的實體
- 1,Microsoft.NET是一個面向網絡,支持各種用戶終端的開發平台
- 2,.NET框架的主要內容是CLR,FCL,ADO.NET,XML,ASP.NET,WinForm和Web Servic等
- 3,CLR是所有.NET應用程序運行時的環境,是所有.NET應用程序都要使用的編程基礎
- 4,FCL是一個寶藏,常用的命名空間下的類庫需要我們在學習中掌握和靈活運用
- 5,MSDN文檔提供了.NET框架類庫的詳細技術說明,善用MSDN可以提高我們分析和解決問題的能力
- 6,類圖是表示結構及類與類之間的關系圖表
- 值類型和引用類型
- 值類型
- 源於System.ValueType命名空間,每個值類型的對象都有一個獨立的內存區域用於保存自己的值,值類型所在的內存區域稱之為“棧”(stack)。
- 不同的變量會分配不同的存儲空間,存儲空間中存儲的是該變量的值
- 改變一個變量值不會影響該到另一個變量值
- 引用類型
- 引用類型源於System.Object命名空間中
- 引用數據類型,賦值是把對象的引用傳遞給另一個引用兩個引用指向同一塊內存空間
- 對於引用類型,賦值是把原對象的引用傳遞給另一個引用,對數組而言,當一個數組引用賦值給另一個數組引用后,這兩個引用指向同一個數組,也就是指向同一塊儲存空間
- 結構
- 語法
- 訪問修飾符 struct 結構名{//結構體}
- 結構的特點
- 值類型
- 具有較快數據提取速度
- 結構中可以有字段,也可以有方法
- 定義結構時,結構中的字段不能給初始值
- 結構可以不new,但是無屬性,要給所有的屬性賦值才能調用方法
- 裝箱和拆箱
- 將值類型轉換為引用類型稱之為裝箱反之為拆箱
- 在實際開發中,應該盡量減少不必要的裝箱和拆箱,因為二者的儲存方式不同,轉換時性能損失較大。
- 不同類型的參數傳遞
- 使用值傳遞,在方法中對參數值得到更改在調用后不能保留
- 使用ref方式傳遞,可以保留對參數值的更改
- 值傳遞和引用方式參數傳遞
- 使用值方式(不用ref修飾)傳遞參數時,參數在方法中修改不會保留
- 使用值方式(不用ref修飾)傳遞參數時,參數在方法中的修改會保留
- 使用引用方式(用ref修飾)傳遞值類型或者引用類型參數時,參數在方法中的修改都會保留
- 總結
- 1,基本數據類型,比如整型,浮點型,字符型,bool型及其結構屬於值類型:數組,接口和類屬於引用類型
- 2,值類型轉換為引用類型成為裝箱,反之為拆箱
- 3,以值方式傳遞值類型參數時,對它的修改不會被保留,以值方式傳遞引用類型參數時,其值的修改將會保留
- 4,以引用方式傳遞引用類型或值類型參數時,其值的修改都會被保留
- 5,結構是值類型數據,可以看成輕量級的類,使用的時候可以不用new
- 集合
- ArrayList
- 類似於數組,成為數組列表ArrayList可以動態維護
- 導入System.Collections命名空間
- 添加數據使用
- 集合名.ADD方法
- 獲取單個元素
- 通過索引來訪問
- 在集合中的類型屬於object需要強制類型轉換
- 刪除元素
- 通過索引刪除:RemoveAt(index);
- 通過對象名刪除:Remove(對象名);
- 清空集合數據:集合名.clear();
- Hashtable
- 添加數據
- 集合名.ADD()方法
- 獲取元素
- 通過鍵名
- 集合名【keys】
- 刪除元素
- 通過鍵名
- 集合名稱.Remove("鍵名");
- 遍歷循環
- 泛型和泛型集合
- 導包
- 導入System.Collections.Generic命名空間
- 語法
- List<T> 對象名=new List<T>();
- List<T>和Array的區別
- 相同點
- 通過索引訪問集合中的元素
- 添加元素方法相同
- 刪除元素方法相同
- 不同點
- List<T>
- 對保存元素進行類型約束
- 添加/讀取值類型元素無須拆箱裝箱
- ArrayList
- 可以增加任何類型
- 添加/讀取值類型元素需要裝箱和拆箱
- Dictionary<k,y>和Hashtable的區別
- 相同點:
- 通過Keys獲取values
- 添加元素方法相同
- 刪除元素方法相同
- 遍歷方法相同
- 不同點
- dictionary<k,y>
- 對所保存的元素進行類型約束
- 添加/讀取值類型元素無須拆箱和裝箱
- hashtable
- 可以增加任何類型
- 添加/讀取值類型元素需要拆箱裝箱
- hashtable
- 常用的方法和屬性
- count:
- 獲取包含在hashtable中鍵/值對的數目
- Keys
- 獲取包含在hashtable中鍵的集合
- values
- 獲取包含在hashtable中值的集合
- 總結
- ArrayList集合可以通過動態維護,訪問元素時需要進行類型轉換
- ArrayList集合刪除數據時,可以通過索引或者對象名稱訪問其中元素
- hashtable類似於生活中的字典,他的元素都是以鍵/值對的方式存在的,訪問其中的元素需要進行類型轉換,遍歷hashtable時,可以遍歷其keys和values。
- hashtable不能通過索引訪問,只能通過Keys和values。
- 可以通過集合初始器構造集合對象
- 泛型是c#2.0中的一個新特性,通過泛型可以最大限度地重用代碼,保護類型的安全及提高性能
- 泛型集合可以約束他所存儲的對象類型,訪問集合中的元素無須進行類型轉換
- list<T>和ArrayList的用法相似,list<T>訪問元素無須進行類型轉化
- dictionary<K,Y>和hashtable的用法相似,dictionary<K,Y>訪問元素無須類型轉換
- 泛型集合可以作為類的一個屬性,使用泛型集合必須實例化
- 對於一些常常處理不同類型數據轉換的類,可以使用泛型定義,定義泛型類的構成與定義一個累相似,不同之處在於,尖括號里定義了類型參數。
- 類的方法
- 構造函數
- 構造函數的特點:
- 方法名與類名相同、
- 沒有返回值類型
- 主要完成對象的初始化工作
- 無參構造函數
- 語法
- 訪問修飾符 類名(){}
- 在默認的情況下,系統將分配給類一個無參構造函數,並且沒有方法體
- 帶參構造方法
- 語法
- 訪問修飾符 類名(參數列表){}
- 方法的重載
- 一個類中的方法與同一個方法同名,但是參數列表不同
- 方法:
- 在一個類中用相同的名稱,但是不同的參數類型創建一個以上的過程,實例構造函數或者屬性
- 重載的特性:
- 在同一個類
- 方法名與類名相同
- 與訪問修飾符和返回值無關
- 參數列表與參數類型不同
- 對象交互
- 每個類都有自己的特性和功能,我們把它們封裝成方法和屬性。對象之間通過屬性和方法進行交互,可以認為方法的參數及其方法的返回值都是對象間相互傳遞的消息。
- 總結
- 帶參構造函數提供了初始化對象時的多種選擇,我們可以有選擇的初始化相應的屬性
- 如果沒有各類添加顯式構造函數,那么系統在初始化對象時會調用隱式構造函數,並且系統會根據屬性的數據類型給其賦予默認值
- 構造函數通常與類名相同,構造函數不聲明返回值,一般情況下,構造函數總是public 類型
- 方法重載是指方法名相同,而參數列表和參數類型不同,在同一個類中,構造函數和普通方法都可以重載
- 同一個類,方法名相同,參數列表相同,但返回值類型不同的方法不能構成方法的重載
- 在面向對象的程序中,對象通過公開方法和屬性完成與其他對象的交互,可以認為方法的參數及其方法的返回值都是對象間相互傳遞的消息
- 繼承和多態
- 什么是繼承?
- 在面向對象的編程中,有兩種截然不同繼承類型:實現繼承和接口繼承
- 實現繼承:
- 表示一個類型派生於基類型,它擁有該基類型的所有成員字段和函數。在實現繼承中,派生類型采用基類型的每個函數的實現代碼,除非在派生類型的定義中指定某個函數的實現代碼。在需要給現有的類型添加功能,或許多相關的類型共享一組重要的公共功能時,可以使用這種類型的繼承。
- *接口繼承:
- 表示一個類型只繼承了函數的簽名,沒有繼承任何的代碼。在需要指定該類型具有某些可用的特性時,最好使用這種類型的繼承
- 一個類可以繼承另一個類
- 繼承的語法:
- public class 子類名:父類{//方法體}
- base關鍵字:
- 表示父類,可以用於訪問父類的成員
- 調用父類的方法及其構造函數,如果父類成員是私有的那么將無法訪問父類成員
- protected訪問修飾符:
- 這個修飾符成員允許子類訪問,而不允許其他非子類訪問
- is a 關系
- 被繼承的類稱為父類或者基類
- 繼承其他類的類稱為子類或者派生類
- 子類與父類之間必須符合 is a 的關系
- 兩大特性
- 單根性:是指子類只能繼承一個父類,不能同時繼承多個父類
- 傳遞性:子類是可以繼承父類的特性,同時子類也可以作為其他類的父類
- 多態
- 虛方法
- 實現方法的重寫
- 父類中定義方法,用virtual關鍵字定義虛方法
- 在子類中定義自雷自己的方法,用override關鍵字來修飾,就實現了父類方法的重寫
- 定義父類變量,用子類對象初始化父類變量
- 總結
- 繼承必須符合is a的關系,被繼承的類成為父類或者基類,繼承其他類成為子類或者派生類
- 繼承機制很好解決了代碼復用的問題
- 子類集成父類的成員,並且可以擁有自己特有的成員
- 被protected訪問修飾符修飾的成員允許被其子類訪問,而不允許其他非子類訪問
- base關鍵字可以用於調用父類屬性,方法和構造函數
- 繼承具有傳遞性,如果class A:B ,class B:C A也可以訪問C的成員
- C#中的繼承具有單根性,一個類不能夠同時繼承自多個父類
- 在子類,如果不適用base關鍵字來顯示調用父類構造函數,將隱式調用父類默認的構造函數
- 如果重載的構造函數有一個沒有使用base關鍵字來指明調用父類的哪一個構造函數,父類必須提供一個默認的構造函數
- 多態按字面的意思就是多種形態指同一操作作用於不同的對象時,可以有不同的解釋,產生不要、同的執行結果
- 可以使用虛方法實現多態
- 深入了解多態
- 里氏替換原則(LSP)
- 在一個軟件系統中,子類對象可以替換所有使用的父類對象,且程序行為沒有變化
- is和as操作符的使用
- is用於檢查對象和指定的類型是否兼容
- as用於兩個對象之間的類型轉化,轉化失敗返回null
- 抽象類和抽象方法
- 抽象方法
- 語法:
- 訪問修飾符 abstract 返回值類型 方法名();
- 注意:
- 抽象方法沒有閉合的大括號,而是直接跟了一個分好,可以說方法沒有方法體
- 含有抽象方法的類必須是抽象類
- 實現抽象方法
- 語法
- 訪問修飾符 override 返回值類型 方法名{}
- 通過override關鍵字可以自由的重寫方法
- 抽象類
- 語法
- 訪問修飾符 abstract 類名{}
- 抽象類提供抽象方法,這些方法只有蒂尼方法,實現友子類重寫實現
- 子類是抽象類可不重寫
- 父類中訪問類型為私有的和靜態修飾
- 抽象類不能被實例化
- 面向對象三大特征
- 封裝:
- 不可分割是的實體
- 隱藏內部的細節
- 保留對外的接口
- 保證對象自身數據的完整性和完整性
- 繼承
- 建立類之間的關系,實現代碼的復用,方便系統的擴展
- 多態
- 相同的方法調用可實現不同的實現方式
- 總結
- 里氏替換原則:子類對象可以代替父類對象,反過來,父類對象不能代替子類對象
- 抽象方法是一個未實現的方法,他用abstract關鍵字修飾,含有抽象方法的類必然是抽象類
- 使用抽象方法不能被實例化,不能密封的或者靜態的
- 抽象類的抽象方法要在子類中通過override關鍵字重寫,除非他的子類也是抽象類
- 面向對象的三大基本特性:封裝,繼承,多態
- is操作符用於檢查對象 和指定類型是否兼容。as操作符主要用於兩個對象之間的類型轉化
- XML
- 什么是XML?
- 稱為可擴展標記性語言
- 用於描述數據,是處理當前處理結構化文檔信息的有力工具
- XML語言的特點
- 每一對標記稱之為節點
- 用於描述數據的各個節點可以自由寬展
- 節點中區分大小寫
- XML和HTML語法上的區別?
- HTML的標記不是所有都需要成對出現
- HTML的標記不區分大小寫
- XML反之
- 解析XML文件
- 步驟
- 導包:using system xml
- 創建XMLDocument對象
- 加載文件 使用lond方法
- 獲取根節點
- 遍歷循環子節點
- 操作XML的對象的屬性和方法
- 總結
- XML稱為可寬展標記性語言,它主要用於描述數據
- 讀取一個XML文檔使用XMLDocument對象,XML節點使用XMLNode對象表示
- XMLDocument對象的Document屬性可以獲得XML文檔的根節點,ChildNods屬性可以獲得所有的子節點
- TreeView用於顯示具有層次結構的信息,主要屬性喲Nods和SelectedNode屬性包含了TreeView頂級子節點集合,SelectedNode表示當前選中的節點
- TreeView表示TreeView的節點對象,Text屬性屬於設置界節點的文字描述,Tag屬性可以設置與節點相關的信息
- 通過TreeNode的Add()方法可以給TreeView添加節點Remove()方法可以移除指定節點Clear()方法可以移除指定節點下的加點所有節點
- 文件操作
- 讀寫文件的步驟
- 導包 using system io
- 創建文件流
- 創建閱讀器或者寫入器
- 執行讀寫操作
- 關閉閱讀器或者寫入器
- 關閉文件流
- FileStream 類
- 語法
- FileStream 文件流對象 =new FileStream (string filepath(路徑),FileMode.fileMode);
- Create:用於指定要操作的文件,如果文件存在,改寫舊文件
- CreateNew:創建一個文件,如果文件存在就會發生異常,提示文件以存在。
- Open:打開一個文件,使用這個枚舉值時,指定文件必須存在,否則會發生異常
- OpenOrCreate:只是如果文件不存在,則用指定的名稱新建一個文件並且打開
- Append:打開現有文件,並且在文件末尾追加內容
- 文件讀寫器
- 語法
- SteamWriter mysr=new SteamWriter (文件流);
- SteamReader讀取器、
- SteamReader:主要用於讀取流中的數據,
- 方法
- SteamReader.ReadLine();讀取文件流中的一行數據,並且返回字符串
- SteamReader.ReadToEnd();從當前位置讀到末尾,返回字符串
- SteamReader.Coles();用於關閉讀取器
- File類和Directiry類
- static和非靜態類的區別
- File類:提供操作文件的各種方法
- Directory 類提供對文件夾的移動、刪除等操作
- 使用靜態方法的語法
- Fileinfo類
- 屬性和方法
- DirectortyInfo類
- 總結
- 讀寫文件五步驟,創建文件流,創建讀寫器,執行讀寫,關閉讀寫器,關閉文件流
- 文件流的類是FileStream,創建一個文件流,需要指定操作文件的路徑,文件的打開方式和文件的訪問方式
- StreamWiter是一個寫入器,StreamReader是讀取器
- File類用於對文件進行操作,比如:復制,移動,刪除等,Directory類用於對文件夾進行操作,他們都是靜態類
- 靜態類只包含實例成員,非靜態類可以包含靜態成員,靜態成員不能包含實例成員,非靜態類可以包含實例成員,非靜態類使用他的實例成員
- FileInfo類與File類功能類似,也可以完成對文件的基本操作,不同的是File類不可以實例化對象,如果大算多次重用某個文件對象,可以考慮使用FileInfo類,因為並不總是需要安全檢查
- DicecoryInfo類與Dicecory類功能類似,可以完成對文件夾的基本操作,如果打算多次重用某個目錄對象,可以考慮使用DicecoryInfo類的實例方法