一:泛型html
關於泛型我本身也不是很好的理解,可是具體的運用仍是能夠的,能夠這樣的理解,咱們定義一個數組,可是不知道未來它是保存什麼類型的值,非常矛盾,這個時候泛型就出現了,它能夠解決這個場景,list<T> 之前這裏是類型,前提是咱們知道這裏未來保存什麼值,如今不知道了使用T(Type)來表示,未來什麼類型的值均可以保存在裏面。這個在集合,項目底層一些公共的接口,類之中使用的特別多。數組
二:集合函數
線型集合----List<T>ui
List<int> array = new List<int>(); int[] str = { 0, 0, 0, 0, }; array.Add(1); array.Add(2); array.Add(5); array.AddRange(str); //這裏是添加一個數組到集合中。 array.Remove(5); //這裏是添加的是一個固定的數字。 array.RemoveAt(1); //這裏的item就是咱們數組的下標。咱們能夠利用這個刪除元素。 array[0] = 23; //修改第一個元素 foreach (var item in array) //這裏是關於集合的循環輸出。 { Console.WriteLine(item.ToString()); } Console.ReadKey();
離散集合編碼
Dictionary<string,int> dic=new Dictionary<string,int>();spa
Dictionary<string, string> dic = new Dictionary<string, string>(); //初始化 dic.Add("張輝", "1193451014"); dic.Add("ahui", "1193451014"); dic.Add("小輝", "1193451014"); dic.Add("王輝", "1193451014"); bool a=dic.ContainsKey("ahui"); //利用鍵來看是否在集合裏面保存 Console.WriteLine(a); //這個鍵值對集合---咱們須要瞭解到如何循環的輸出 foreach (KeyValuePair<string, string> item in dic) //輸出的時候注意臨時變量(item)的類型-----KeyValuePair<string, string> { Console.WriteLine(item.Key + "," + item.Value); } Console.ReadKey();
三:文件操做3d
文件是什麼:是硬盤裏面的一個內存,是一堆字節快。htm
1:命名空間blog
System.IO; //文件的命名空間
2:FileStream文件流,將文件以字節的方式進行讀寫。繼承
上面的圖片是關於文件的一些經常使用的方法和類。下面是一些練習。
--->FileStream文件流。
1:關於文件流的寫。
咱們看一FileStream有哪些方法。都是一些構造函數。
---->WriteByte()方法
//FileStream-----利用文件流來寫,第一個參數是文件名,第二個是枚舉類型,咱們選擇從新寫入。第三個是權限的選擇。 FileStream fWrite=new FileStream("ahui.txt",FileMode.Create,FileAccess.Write); fWrite.WriteByte(97); //寫入了,可是咱們要是沒有調用display或者Flush就不會寫入文件,只是寫入緩衝期。 //Flush()-----清除此流的緩衝區,使得全部緩衝的數據都寫入到文件中。 fWrite.Flush(); //這樣才能寫入文件中。 Console.WriteLine(fWrite); Console.ReadKey();
上面的代碼要是咱們從客戶端輸入就會出現亂碼,咱們須要經過設置編碼的格式來修改。
----->Write()
Console.WriteLine("請輸入?"); string sInput = Console.ReadLine(); //設置編碼格式----有助於咱們往文件中寫入漢字 byte[] bs = Encoding.Default.GetBytes(sInput); fWrite.Write(bs,0,5); //寫入了,可是咱們要是沒有調用display或者Flush就不會寫入文件,只是寫入緩衝期。
---->ReadByte()
//利用using來寫,這個最後會自動的調用Display()方法 ,使咱們寫在緩衝區的內容寫入到文件中。 using (FileStream fRead=new FileStream("ahui.txt",FileMode.Open,FileAccess.Read)) { List<byte> list=new List<byte>(); //設置一個集合 int res = -1; while ((res=fRead.ReadByte( ))!=-1) //利用循環來把文件中的值添加到集合中 { list.Add((byte)res); //集合的Add()方法。 } } Console.ReadKey();
這裏的49和50是我文件中保存的值。
---->Read
using (FileStream fReader=new FileStream("ahui.txt",FileMode.Open,FileAccess.Read)) { //使用數組來存儲一個塊字節 byte []bs=new byte[10]; //這個就至關於緩衝區同樣 int count = fReader.Read(bs,0,bs.Length); //要求讀取10個字節,從數組的第0位開始,所有存儲完。 }
---->複製文件
//思路---------------先讀取文件,後寫入文件。 Console.Write("請輸入你要複製的路徑#"); string str = Console.ReadLine(); if (!File.Exists(str)) //判斷文件是否存在 { Console.WriteLine("文件不存在,,,你搞我呀,"); Console.ReadKey(); return; //直接跳出. } //走到這裏就表示文件存在 Console.Write(" 請輸入要往哪裏複製#"); string strM = Console.ReadLine(); using (FileStream fReader=new FileStream(str,FileMode.Open,FileAccess.Read)) //進行讀的操做 { using (FileStream rWrite=new FileStream(strM,FileMode.Create,FileAccess.Write)) //進行寫操做 { //第一種------利用ReadByte()和WriteByte()按照字節來進行處理 int res = -1; while ((res=fReader.ReadByte())!=-1) //這裏看是否讀取到值,是否進行循環,沒讀取到res=-1,則不進行寫入操做。 { rWrite.WriteByte((byte)res); //參數只能是byte類型的,咱們須要強制類型轉換。 } } } Console.WriteLine("OK"); Console.ReadKey();
上面的效率不是很高,咱們能夠利用Read()/Write()來進行,效率比以前的高不少。
//第二種------利用Read()和Write()按照字節來進行處理 //這裏利用的是buffer,咱們須要一個字節數組來處理。 byte [] buBytes=new byte[1024*1024*10]; //申請了一個10M大小的空間。 int count = 0; while ((count = fReader.Read(buBytes, 0, buBytes.Length)) > 0) //把讀取到的內容寫入到了buffer中,咱們只要文件中有值,count就會大於0。 { rWrite.Write(buBytes, 0, count); //把buffer中的值寫入到文件中。 }
四:Encoding處理字符集。
聲明一個字符編碼,
Encoding en = Encoding.GetEncoding("gb2312"); //聲明一個gb2312的字符編碼
獲得計算機中的全部字符編碼
EncodingInfo[] ens = Encoding.GetEncodings(); //獲得全部的編碼 ,返回的是一個數組。+EncodingInfo是一個類,裏面有一些關於編碼的屬性。 for (int i = 0; i <ens.Length ; i++) { Console.WriteLine("{0},{1},{2}",ens[i].CodePage,ens[i].DisplayName,ens[i].Name); } Console.ReadKey();
咱們經過控制檯能夠看到PC中的全部的編碼。
上面的代碼中有註釋,咱們能夠發現有些編碼咱們能夠經過一個類來聲明一個數組,這樣就能夠點 出來咱們的全部的編碼,其中有編碼的編碼數,編碼名稱,編碼說明。
eg:將數字轉換爲16進制。
for (int i = 0; i < 17; i++) { Console.WriteLine(i.ToString("x2")); //這裏面的x表示的是編碼的格式爲16進制。 2表示保留2位數。 } Console.ReadKey();
五:關於繼承被初識化的調用問題
子類繼承基類,當子類被初始化的時候,咱們是先調用基類的構造函數,在調用子類的構造函數,這裏有個叫作回溯的問題。是從裏到外的。
/// <summary> /// 基類 /// </summary> public class Parset { public Parset() { Console.WriteLine("基類被調用了。"); } } /// <summary> /// 子類 /// </summary> public class ChildA:Parset { private string name = "阿輝"; public ChildA() { Console.WriteLine("子類被調用了,,,"); } public void SayHello() { Console.WriteLine(name); } }
ChildA ca=new ChildA(); ca.SayHello(); Console.ReadKey();
咱們經過這裏就能夠發現這個規則。