深入.NET平臺和C#編程_知識點總結

                             深入.NET平臺和C#編程_知識點總結

                                                                                                                            作者:田超凡

版權所有,轉載請註明原作者,仿冒侵權必究法律責任


一、深入.NET平臺
1.NET核心組成部分:
公共語言運行時CLR:相當於託管代碼的代理,提供了.NET程序運行時的環境
由兩部分組成:
公共語言規範CLS:定義了.NET平臺不同語言語法的兼容性規範問題
通用類型系統CTS:定義了.NET平臺不同語言數據類型不同的問題

框架類庫FCL:由封裝好的多個類組成的類庫,提供了各種.NET程序模塊功能的訪問的通用統一的接
口。
常用的類庫有:
System.Data/System.Windows.Forms/System.IO/System.Collections.Generic/System.Drawing
類圖:用來表示類的組成部分和類與類之間關係的圖表

二、值類型和引用類型參數傳遞
數據類型從大的角度來說分爲值類型和引用類型
常見值類型:基本數據類型\enum枚舉\struct結構...  c d
常見引用類型:類\String\接口\數組\集合....

參數傳遞的方式有兩種:
值方式傳遞(參數不用ref修飾):
值類型數據:值傳遞參數副本,不會改變參數原來的值。
引用類型數據:類似指針指向參數所在的內存地址,會保留參數更新後的值

引用方式傳遞(參數要用ref修飾):
值類型數據/引用類型數據:都要保留參數更新後的值


三、使用集合組織數據
集合:是用來存儲一組相同數據類型數據的容器
集合類型:泛型集合和非泛型集合
常見非泛型集合:
ArrayList:存儲方式類似於數組,可以索引訪問集合元素
HashTable:哈希表存儲結構,每個元素都是鍵值對,通過鍵獲取值
常見泛型集合(限定集合中的數據類型,確保集合數據類型的安全):
List<T>:可以索引訪問集合元素
Dictionary<K,V>:鍵值對訪問集合元素,通過鍵獲取值,K代表key表示鍵的數據類型,V表示value即值得數據類型
泛型:在定義時即限定了數據類型
泛型集合優點:
數據類型安全、性能高。。。

獲取元素[index]下標或者[key]獲取元素/添加元素add()/刪除元素對象remove()/removeAt()根據索引刪除,只適用於List<T>和ArrayList

四、深入類的方法
構造函數(構造方法):便於初始化對象
特點:
構造函數名和類名相同,沒有返回值,不能加void,一般適用於初始化對象
方法重載:方法名相同,參數不同的方法,在同一個類中c
特點:
方法名相同
參數類型不同或參數數量不同
在同一個類中

對象交互:在面向對象的編程語言中,對象和對象之間相互獨立,互不干涉,但是在一定外力的作用下,對象開始共同努力。
可以認爲,方法的參數和方法的返回值都是對象和對象之間相互傳遞的消息

五、深入繼承和多態
繼承:繼承就是根據一個已知類派生其他子類的過程,被繼承的類被稱爲父類或基類,繼承其他類的類被稱爲子類或派生類
實現繼承的語法:
繼承優點:代碼複用,便於編碼和維護
子類:父類
繼承的特性:
繼承具有傳遞性:A:B,B:C,則A:C
繼承具有單根性:一個類只能有一個直接父類
子類可以繼承父類的哪些東西?
只能繼承父類的public\protected屬性、方法,private成員不能繼承,構造函數不能繼承,只能調用
protected修飾符和base關鍵字
protected修飾符:受保護的,只能在當前類和當前類的子類中使用,其他地方不能訪問
base關鍵字:當前類的直接父類對象的引用,可以調用父類的屬性、方法、構造函數
語法:
base.屬性名
base.方法名
子類構造函數:base(向父類構造函數傳遞的參數,不需要顯示指定數據類型)
小結:常見訪問修飾符的訪問權限比較
private修飾符:只能在當前類使用,訪問權限(範圍)最小(限制的程度最強)
protected修飾符:只能在當前類和當前類的子類中使用
public修飾符:其他類都可以使用,訪問權限(範圍)最大(限制的最弱)
internal修飾符:只能在當前程序集/項目類使用

大小(作用範圍)比較:
public>internal>protected>private

繼承條件下構造函數的調用:
如果在子類構造函數中沒有顯示調用父類的構造函數,也沒有顯式調用當前子類的構造函數,
默認先調用父類的無參構造函數。
當在子類構造函數中顯示調用了父類的帶參構造函數,將不再調用父類的無參構造函數
系統默認會爲每一個類分配默認的無參構造函數,當顯式定義了構造函數,系統將不再分配默認的無參構造函數
密封類:使用sealed修飾,不能被繼承的類

多態:從字面意義上來看,就是指多種形態,實際意義是指同一個方法作用與不同對象時,可以有不同的解釋,產生不同的執行結果
實現多態的步驟:
1.繼承是多態的前提,首先定義父類和子類的屬性和方法
2.父類定義虛方法/抽象方法,子類重寫父類方法
3.父類引用變量指向子類對象

虛方法:父類定義的一個具有默認實現的方法,必須有方法主體
訪問修飾符 virtual 返回值類型 方法名(參數列表){
   //方法體
}

方法重寫:子類對父類中定義的虛方法或抽象方法進行重新編寫,實現方法重寫必須確保:
子類重寫的方法和父類被重寫的方法必須定義保持一致(方法名、參數列表保持一致,返回值儘量保持一致,
特殊情況下子類重寫的方法返回值可以是父類的某個子類類型)
語法:
訪問修飾符 override 返回值類型 方法名(參數列表){
   //方法體
}

實現多態的應用:
1.父類作爲方法形參實現多態
2.父類作爲方法返回值實現多態
3.is操作符和as操作符:
is判斷對象的實際類型,返回bool值
as用來進行類型轉換,即使轉換失敗,不會報錯,返回null
4.注意:父類引用變量指向子類對象時(將一個子類對象賦給一個父類變量時),
只能調用父類子類中同時定義的方法,不能調用子類特有的方法

六、深入理解多態
里氏替換原則:是軟件程序設計遵循的基本原則。
定義:子類可以替換父類,並且能夠在父類能夠出現的任何位置,但是父類對象是不能替代子類對象的
,這種特性被稱爲里氏替換原則(“老鼠的兒子會打洞”)
抽象類和抽象方法:
一般需要將不允許被實例化(實例化沒有實際意義)的父類定義爲抽象類
一般需要將抽象類中沒有默認實現的方法定義爲抽象方法,也就沒有方法體。
特點:
1.抽象類不能實例化 
2.抽象方法只有定義,沒有具體實現
3.含有抽象方法的類必然是抽象類,但是抽象類中不一定全都是抽象方法,可以有其他方法如虛方法
4.子類繼承抽象類,則必須實現抽象類中定義的所有抽象方法,否則該子類也應該定義爲抽象類

對比一下虛方法和抽象方法:
虛方法必須有方法體,抽象方法沒有方法體
抽象方法只能定義在抽象類中,虛方法可以定義在其他類中
抽象方法使用abstract修飾。虛方法使用virtual修飾

七、可擴展標記性語言XML
XML語言:全程Extensible Markup Language可擴展標記性語言,特點如下:
1.支持跨平臺數據交互
2.用來結構化存儲數據
3.嚴格區分大小寫
4.語法類似html,但是有明顯區別:區分大小寫,htmlm描述數據,xml存儲有價值的信息
5.xml節點必須成對出現

XML讀取
XmlDocument document=new XmlDocument();
document.Load("xml文件名");
XmlNode node=document.DocumentElement;//獲取根節點
foreach(XmlNode n in node.ChildNodes)
{
   ...
XmlNode對象的屬性
Name節點名
InnerText節點文本值
ChildNodes子節點集合
}

靜態類:
不能實例化,只能有靜態成員

非靜態類:
可以實例化,即可以有靜態成員,也可以由非靜態成員

靜態成員:
靜態屬性(類屬性)、靜態方法(類方法),靜態代碼塊
靜態成員加載優先級最高,靜態成員不屬於某個具體實例,所在類的所有實例共享類中定義的靜態成員
可以直接通過類名調用

非靜態成員:
不用static修飾的成員,即實例成員

靜態構造函數
只能初始化靜態成員

非靜態構造函數不用static修飾的

TreeView樹狀視圖動態操作節點
添加
this.tv.Nodes.Add(TreeNode對象/文本字符串string);
移除
this.tv.SelectedNode.remove();

操作文本
this.tv.SelectedNode.Text="文本內容";

使用節點存儲關鍵信息
this.tv.SelectedNode.Tag=目標對象


八。文件操作
步驟:
創建文件流、創建閱讀器或寫入器、執行讀寫操作、關閉閱讀器或寫入器、關閉文件流
FileStream  fs=new FileStream("文件路徑",FileMode.Create/CreateNew/Append/Open/OpenOrCreate);
StreamReader sr=new StreamReader(fs);
sr.ReadLine();
sr.ReadToEnd();

StreamWriter writer=new StreamWriter("文件路徑path");
writer.write(");
writer.writeLine();

sr.close();writer.close();
fs.close();


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章