第十天覆習數組
字符串 一、字符串的不可變性 二、字符串的方法 繼承:解決類中的代碼冗餘 子類繼承父類的屬性和方法 子類默認調用父類無參的構造函數(由於子類須要創造父類的對象) this: base: new:
以上爲第十天學習的內容dom
第十一天新知識
1、里氏轉換
一、子類能夠賦值給父類:若是又一個地方須要一個父類做爲參數,咱們能夠給一個子類代替
Student s = new Student()
Person p =s;ide
string.join("|",new sstirong[]{"1","2","3"})函數
二、若是父類中裝的是子類對象,那麼能夠將這個父類強轉爲子類對象學習
子類對象能夠調用父類的對象,可是父類只能夠調用本身的this
語法:編碼
static void Main(string[] args) { ////一、子類能夠賦值給父類: 若是又一個地方須要一個父類做爲參數,咱們能夠給一個子類代替 //Student s = new Student(); //Person p = s; Person p = new Student();//簡寫 //string str = string.Join("|", new string[] { "1", "2", "3" }); //Console.WriteLine(str); //Console.ReadKey(); ////2.若是父類中裝的是子類對象,那麼能夠將這個父類強轉爲子類對象 Student ss = (Student)p; ss.StudentSayHello(); Console.ReadKey(); }
關鍵字:
is:表示類型轉換,轉換成功返回true,失敗返回false
語法code
static void Main(string[] args) { ////一、子類能夠賦值給父類: 若是又一個地方須要一個父類做爲參數,咱們能夠給一個子類代替 Person p = new Student();//簡寫 ////2.若是父類中裝的是子類對象,那麼能夠將這個父類強轉爲子類對象 if (p is Student) { Student ss = (Student)p; ss.StudentSayHello(); } else { Console.WriteLine("轉換失敗"); } Console.ReadKey(); }
as:表示類型轉換,轉換成功返回對應的對象,失敗返回null
語法視頻
static void Main(string[] args) { ////一、子類能夠賦值給父類: 若是又一個地方須要一個父類做爲參數,咱們能夠給一個子類代替 Person p = new Student();//簡寫 ////2.若是父類中裝的是子類對象,那麼能夠將這個父類強轉爲子類對象 teachar t = p as teachar; Console.ReadKey(); }
里氏轉換練習代碼對象
static void Main(string[] args) { //難點1:子類能夠賦值給父類 Person[] p = new Person[10]; Random r = new Random(); for (int i = 0; i < p.Length; i++) { int rNum = r.Next(1, 7); switch (rNum) { case 1:p[i]=new Student(); break; case 2:p[i] = new Teachar(); break; case 3:p[i] = new YeShou(); break; case 4:p[i] = new MeiNv(); break; case 5:p[i] = new ShuaiGuo(); break; case 6:p[i] = new Person(); break; } } for (int i = 0; i < p.Length; i++) { //難點2:若是父類中裝的是子類對象,就能夠將父類強制轉換成子類 if (p[i] is Student) { ((Student)p[i]).StudentSayHello(); } else if (p[i] is Teachar) { ((Teachar)p[i]).TeacharSayHello(); } else if (p[i] is YeShou) { ((YeShou)p[i]).YeShouSayHello(); } else if (p[i] is MeiNv) { ((MeiNv)p[i]).MeiNvSayHello(); } else if (p[i] is ShuaiGuo) { ((ShuaiGuo)p[i]).ShuaiGuoSayHello(); } else { p[i].PersonSayHello(); } } Console.ReadKey(); }
2、protected訪問修飾符
受保護的,能夠在當前類的內部,和該類的子類中訪問
3、ArrayList集合
特徵:集合長度可變,類型隨便放
ArrayList語法及各類方法
static void Main(string[] args) { //建立一個集合對象 ArrayList list = new ArrayList(); //集合:不少數據的一個集合 //素組:長度不可變、類型單一 //集合:長度能夠任意改變,類型隨便放 //Add添加單個元素 list.Add(1); list.Add(3.14); list.Add("張三"); list.Add('男'); //AddRange添加集合元素 list.AddRange(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }); //list.AddRange(list); //list.Clear();清空全部元素 //list.Remove(1);刪除單個元素,寫誰刪誰 //list.RemoveAt(0);根據索引刪除元素 //list.RemoveRange(0, 3);根據索引移除必定範圍的元素 // list.Sort();//升序排序。須要注意的是類型須要同樣 //list.Reverse();//反轉 //list.Insert(1, "插入的");//插入單個元素 // list.InsertRange(0, new int[] { 1, 2, 3, 4 });//在指定的位置插入集合 //bool b = list.Contains(1);//判斷是否包含某個指定的元素 if (!list.Contains("岩石爲")) { list.Add("岩石爲"); } else { Console.WriteLine("已經有這個吊毛了!"); } for (int i = 0; i < list.Count; i++) { Console.WriteLine(list[i]); } Console.ReadKey(); }
ArrayList集合的長度問題
每次集合中實際包含的元素個數(count)超過能夠包含的元素的個數(capcity)的時候,集合就會向內存中申請多開闢出一倍的空間,來保證集合的長度一直夠用
static void Main(string[] args) { ArrayList list = new ArrayList(); list.Add(1); //count 表示這個集合中實際包含的元素的個數 //capcity 表示這個集合中科院包含的元素的個數 Console.WriteLine(list.Count); Console.WriteLine(list.Capacity); Console.ReadKey(); }
ArrayList集合的兩個練習
static void Main(string[] args) { ////建立一個集合,裏面添加一些數字,求平均值與和,最大值,最小值 //ArrayList list = new ArrayList(); //list.AddRange(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }); //int sum = 0; //int min = (int)list[0]; //int max = (int)list[0]; //for (int i = 0; i < list.Count; i++) //{ // //list的父類是object類型,因此值須要轉爲int類型,這裏用的是里氏轉換 // sum += (int)list[i]; // if (min < (int)list[i]) // { // min = (int)list[i]; // } // if (max > (int)list[i]) // { // max = (int)list[i]; // } //} //Console.WriteLine("最大值是{0},最小值是{1},和是{2},平均值是{3}", max, min, sum, sum / list.Count); //Console.ReadKey(); //寫一個長度爲10的集合,要求在裏面隨機存放10個數字(0-9) //可是要求全部的數字不重複 ArrayList list = new ArrayList(); Random r = new Random(); for (int i = 0; i < 10; i++) { int rNum = r.Next(0, 10); //集合中沒有這個隨機數,就加進去 if (!list.Contains(rNum)) { list.Add(rNum); } else//集合中有這個隨機數 { i--;//一旦產生重複的隨機數,此次循環就不算數。 } } for (int i = 0; i < list.Count; i++) { Console.WriteLine(list[i]); } Console.ReadKey(); }
4、Hashtable集合 鍵值對集合 相似於字典經過拼音或者pa偏旁查找字。鍵值對集合則是經過鍵去找值
鍵值對對象[鍵] = 值;
鍵值對集合當中,鍵必須是惟一的,值則能夠重複
var:推斷類型
C#是一門強類型語言:在代碼中必須對每個變量的類型有一個明確的定義、
JS是一門弱語言,不須要對每個變量都有一個明確的定義,通通用var都能搞定
var:根據值來推斷出值得類型。在使用var時候必須給變量先賦值。
鍵值對集合:經過for循環是不能徹底遍歷鍵值對集合的,這是由於鍵不必定都是數字,因此就得使用foreach循環來遍歷。
語法與方法
static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add(1, "張三"); ht.Add(2, true); ht.Add(3, '男'); ht.Add(false, "錯誤的"); ht[4] = 6;//這也是一種添加數據的方法 ht[1] = "把張三幹掉"; ht["abc"] = "哼哼哼"; ////在鍵值對集合中,是根據鍵去找值的 //Console.WriteLine(ht[1]); //Console.WriteLine(ht[2]); //Console.WriteLine(ht[3]); //Console.WriteLine(ht[false]); //Console.WriteLine(ht[1]); //for循環打印不出false時,由於沒有遍歷到false,因此最後一個不會顯示 //for (int i = 0; i < ht.Count; i++) //{ // Console.WriteLine(ht[i]); //} //鍵值對的方法 ContainsKey if (!ht.ContainsKey("abc")) { ht.Add("abc", "哈哈哈"); } else { Console.WriteLine("已經包含abc這個鍵了"); } ht.Clear();//移除集合中全部元素 ht.Remove(3);//根據鍵移除元素 //輸出每一個Hashtable鍵值對集合中的元素,咱們須要採用foreach循環 foreach (var item in ht.Keys) { Console.WriteLine("鍵是----{0},-----值是{1}", item, ht[item]); } Console.ReadKey(); }
繁簡轉換練習
class Program { //鍵值對集合中,鍵要跟值都對得上 private const String jian = "個人電腦"; private const String fan = "硪的電脳"; static void Main(string[] args) { //將用戶輸入的簡體字,轉換爲繁體字 Hashtable ht = new Hashtable(); //由於string類型能夠將之看出char類型的數組,全部使用循環將簡體字做爲鍵,繁體字做爲值,放入集合中 for (int i = 0; i < jian.Length; i++) { ht.Add(jian[i], fan[i]); } string str = "個人電腦"; //遍歷用戶輸入的字符串,將每個字符都轉換成繁體字 for (int i = 0; i < str.Length; i++) { //若是是用戶輸入,首先存在並非全部字都有,其次還存在用戶輸入其餘字符,因此須要作一個判斷, //若是用戶輸入不符合,就返回原值 if (ht.ContainsKey(str[i])) { Console.Write(ht[str[i]]); } else { Console.Write(str[i]); } } Console.ReadKey(); } }
5、Path類的方法:專門用來操做路徑的
static void Main(string[] args) { //若是要拿到1.avi 使用字符串的方法很麻煩 string str = @"D:\BaiduNetdiskDownload\精品奉獻.Net基礎視頻教程\(第十一天)\video\1.avi"; //int index = str.LastIndexOf("\\"); //str = str.Substring(index + 1); //Console.WriteLine(str); Console.WriteLine(Path.GetFileName(str));//快速拿到文件名 Console.WriteLine(Path.GetFileNameWithoutExtension(str));//快速拿到文件名,不包括擴展名 Console.WriteLine(Path.GetExtension(str));//得到擴展名 Console.WriteLine(Path.GetDirectoryName(str));//得到文件所在的文件夾路徑 Console.WriteLine(Path.GetFullPath(str));//得到文件所在的全路徑 Console.WriteLine(Path.Combine(@"C:\a\", "b.txt"));//將兩個字符串當作路徑相加 Console.ReadKey(); }
6、File類(專門用來操做文件的)
static void Main(string[] args) { //在指定路徑建立對應的文件 //File.Create(@"C:\Users\Administrator\Desktop\12345.txt"); //Console.WriteLine("建立成功"); //刪除指定路徑的文件 //File.Delete(@"C:\Users\Administrator\Desktop\1.txt"); //Console.WriteLine("刪除成功"); //複製一個文件 //File.Copy(@"C:\Users\Administrator\Desktop\1.docx", @"C:\Users\Administrator\Desktop\2.docx"); //Console.WriteLine("複製成功"); Console.ReadKey(); }
十一天的視頻少了部份內容 File類的讀寫方法
//File類:文本文件進行讀寫 //byte[] buffer = File.ReadAllBytes(@"C:\Users\Administrator\Desktop\1.txt"); ////將字節數組中的每個元素都要按照咱們制定的編碼格式解碼成字符串 ////UTF-8 GB2312 GBK ASCII Unicode //// string s = Encoding.Default.GetString(buffer); //string s = Encoding.GetEncoding("gb2312").GetString(buffer); //Console.WriteLine(s); //若是沒有這個文件,系統會建立一個,有就覆蓋 string str = "今每天氣不錯,挺風和日麗的"; byte[] buffer = Encoding.Default.GetBytes(str); File.WriteAllBytes(@"C:\Users\Administrator\Desktop\2.txt",buffer); Console.WriteLine("寫入成功"); Console.ReadKey();
7、編碼簡介編碼:將字符串以怎麼樣的形式保存爲二進制