第十天复习数组
字符串 一、字符串的不可变性 二、字符串的方法 继承:解决类中的代码冗余 子类继承父类的属性和方法 子类默认调用父类无参的构造函数(由于子类须要创造父类的对象) 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、编码简介编码:将字符串以怎么样的形式保存为二进制