第一部分:面向對象 封裝 繼承(里氏轉換) 多態第二部分:值類型、引用類型、字元串操作第三部分:集合文件操作第四部分:正則表達式第五部分:XML操作第六部分:委托、事件第七部分:反射。 //存儲著我們當前正在運行的進程//Process[] pro = Process.GetProcesses(); ...
第一部分:面向對象 封裝 繼承(里氏轉換) 多態
第二部分:值類型、引用類型、字元串操作
第三部分:集合文件操作
第四部分:正則表達式
第五部分:XML操作
第六部分:委托、事件
第七部分:反射。
1、變數的命名 首先我們要保證的就是變數的名稱一定要有意義(就是我們看到了變數的名字,就知道變數在這段程式中的作用) Camel:多餘用給變數或者欄位命名,第一個單詞的首字母小寫,其餘每個單詞的首字母大寫。 我們給欄位命名,前面必須加下劃線。 _highSchoolStudent Pascal:要求我們每個單詞的首字母都要大寫,其餘每個單詞的首字母小寫。 HighSchoolStudent int max= GetMax(); int min= GetMin(); 2、進程 一個應用程式就是一個進程,而一個進程又是由多個線程組成的。 進程幫助我們在記憶體中分配應用程式執行所需要的空間。
//存儲著我們當前正在運行的進程
//Process[] pro = Process.GetProcesses();
//foreach (var item in pro)
//{
// //item.Kill();不試的不是爺們
// Console.WriteLine(item.ProcessName);
//}
//使用進程來打開應用程式
//Process.Start("notepad");//打開記事本
//Process.Start("mspaint");//打開畫圖工具
//Process.Start("iexplore", "http://www.baidu.com");
//Process.Start("calc");//打開計算器
//使用進程來打開文件
//封裝我們要打開的文件 但是並不去打開這個文件
ProcessStartInfo psi = new ProcessStartInfo(@"C:\Users\SpringRain\Desktop\打開文件練習.exe");
//創建進程對象
Process pro = new Process();
//告訴進程要打開的文件信息
pro.StartInfo = psi;
//調用函數打開
pro.Start();
Console.ReadKey();
----> 我們可以通過進程來直接操作應用程式。 3、面向對象複習 類決定了對象將要擁有的屬性和行為。
class BaseFile
{
//欄位、屬性、構造函數、函數、索引器
private string _filePath;
public string FilePath//ctrl+R+E
{
get { return _filePath; }
set { _filePath = value; }
}
//自動屬性 prop+兩下tab
public string FileName { get; set; }
public BaseFile(string filePath, string fileName)
{
this.FilePath = filePath;
this.FileName = fileName;
}
//設計一個函數 用來打開指定的文件
public void OpenFile()
{
ProcessStartInfo psi = new ProcessStartInfo(this.FilePath + "\\" + this.FileName);
Process pro = new Process();
pro.StartInfo = psi;
pro.Start();
}
}
封裝: --->減少了大量的冗餘代碼 --->封裝將一坨很難理解的功能封裝起來,但是對外提供了一個很簡單的使用介面。我們會使用就OK。 繼承: --->減少了類中的冗餘代碼 --->讓類與類產生了關係,為多態打下了基礎。 特性: 單根性:一個子類只能有一個父類 傳遞性:爺爺類 爹類 兒子類 里氏轉換: 1、子類可以賦值給父類 2、如果父類中裝的是子類對象,則可以將這個父類轉換為對應的子類對象 ---->關鍵字 1、is:返回bool類型,指示是否可以做這個轉換 2、as:如果轉換成功,則返回對象,否則返回null 作用:我們可以將所有的子類都當做是父類來看,針對父類進行編程,寫出通用的代碼,適應需求的不斷改變。 多態: --->虛方法 virtual override --->抽象類 abstract override --->介面 interface 4、關鍵字 new 1、創建對象 --->在堆中開闢空間 --->在開闢的堆空間中創建對象 --->調用對象的構造函數 2、隱藏父類的成員 this 1、代表當前類的對象 2、顯示的調用自己的構造函數 base 1、顯示調用父類的構造函數 2、調用父類的成員 5、抽象類實現多態練習 模擬將外部的移動存儲設備插到電腦上進行讀寫數據。 U盤 Read() Write() 移動硬碟 Read(); Write(); MP3 Read(); Write(); PlayMusic(); 手機....平板電腦...... 6、介面 ---->介面是一種能力 ---->介面也是一種規範 ---->如果你繼承了這個介面,就必須按照介面的要求來實現這個介面。 interface I開頭...able結尾 7、石頭剪刀布案例 玩家 --->出拳的方法,是我們指定的 電腦 --->出拳的方法,隨機的 裁判 --->判斷輸贏或者平手 石頭1 剪刀2 布3 玩家贏:石頭1 剪刀2 =-1 剪刀2 布3 =-1 布3 石頭1=2 平手:玩家-電腦=0; 電腦贏: 8、訪問修飾符 public private internal protected protected internal public:在哪都可以訪問 private:私有的,只能在當前類的內部進行訪問 internal:只能在當前程式集中訪問。 protected:受保護的,可以在當前類以及該類的子類中訪問 註意點: 1、能夠修飾類的訪問修飾符只有兩個:public internal(預設就是internal)。 2、在同一個項目中,public的許可權跟internal是一樣的。 3、子類的訪問許可權不能高於父類。
1、導入命名空間 命名空間就是類的"文件夾"。類就是"文件夾"中的文件。需要導入命名空間 添加引用: 如果我需要在一個項目中,訪問另一個項目中的某一個類 --->添加對另一個項目的引用 --->導入命名空間 2、靜態和非靜態 靜態成員:被static修飾 實例成員:不被static修飾 靜態成員先於實例成員被載入到記憶體中,只有創建了對象,才有實例成員。 靜態類中只能存在靜態成員 調用: 靜態成員調用: 類名.靜態成員名; 實例成員調用: 實例名.實例成員;(實例就是我們的對象) 什麼時候使用靜態? ---->作為工具類 ---->在整個項目中資源共用,正因為它是資源共用的,所以靜態成員必須要等到整個項目都結束的時候 才會被資源釋放。 在我們的項目中應該儘可能的少使用靜態成員。 繼承是創建對象的過程。 3、設計模式 ---->單例設計模式 在整個程式中,我們要保證對象必須是唯一的。 實現: ---->第一步:構造函數私有化 ---->第二步:聲明一個靜態欄位,作為全局唯一的單例對象 ---->第三步:聲明一個靜態函數,返回全局唯一的對象 ---->簡單工廠設計模式 核心:把所有的子類都當做父類來看待 練習: 提示用戶分別的輸入兩個數字: 再輸入運算符:返回一個計算的父類,並調用方法得到結果。 Add Sub Cheng Chu 建築行業最早應用到設計模式這個概念 1、註冊一個公司 2、招兵買馬 3、投標買地 4、安排施工隊開始施工 5、賣樓 設計模式就是用來專門解決一些特定的問題。 4、類庫 .dll文件,我們使用類庫來幫助我們封裝一些常用的功能 5、值類型和引用類型 值類型:int double char bool decimal struct enum 引用類型:string 數組 自定義類 介面 委托 值類型的值存儲在記憶體的棧上,引用類型的值存儲在堆中。 棧上存儲數據的效率要高於堆。 值傳遞:把值類型作為參數傳遞,把值本身進行傳遞。 註意: ref可以把值傳遞改變為引用傳遞。 引用傳遞:把引用類型的值作為參數傳遞,傳遞的是引用。 6、字元串的學習 重要特性: 不可變性,我們不管對字元串做什麼操作,都會在記憶體中產生一塊新的實例。 駐留池 我們可以將一個字元串看作是char類型的只讀數組。 GC:Garbage Collection垃圾回收 ,每隔一段時間,會掃描整個記憶體,發現,如果有的空間沒有被指向。則立即把它銷毀。
1、StringBuilder 它就是拼接字元串的一個工具,拼成完成後,還是需要將它轉回字元串。 2、ref參數 ref參數側重於將一個值帶到函數中進行改變,再講改變後的值帶出去。ref參數在函數內不用賦值 函數外必須為ref參數賦值。 3、out參數 4、params可變參數 5、集合的學習 非泛型集合 ArrayList Hashtable 泛型集合 List<T> Dictionary<Tkey,Tvalue> 6、裝箱和拆箱 裝箱:值類型---->引用類型 拆箱:引用類型--->值類型 我們判斷是否發生了拆箱或者裝箱,首先要判斷這兩種數據類型是否存在繼承關係。 你裝箱的時候拿什麼類型裝的箱,你拆的時候,就得拿什麼類型去拆。 7、List<T>常用的函數 Add():添加單個元素 AddRange():添加一個集合 Insert():插入一個元素 InsertRange():插入一個集合 Remove():移除指定的元素 RemoveAt():根據下標移除元素 RemoveRange():移除一定範圍內的元素 ToArray():集合轉換成數組 ToList():數組轉換成集合 8、編碼格式 將字元串是怎樣的形式保存為二進位。 ascii 256 6000 GB2312 GBK GB18030 ISO Unicode utf-16 utf-8 出現亂碼的原因:我們保存這個文件的時候採取的編碼跟打開這個文件的時候採取的編碼格式不一致。 文本文件:拖到txt中還能看得懂得就是文本文件。