1、c#中的访问修饰符 public :公开的公共的 private:私有的,只能在当前类的内部访问 protected:受保护的,只能在当前类的内部以及该类的子类中访问。 internal:只能在当前项目中访问。在同一个项目中,internal和public的权限是一样。 protected internal:protected+internal
1)、能够修饰类的访问修饰符只有两个:public、internal。 2)、可访问性不一致。 子类的访问权限不能高于父类的访问权限,会暴漏父类的成员。
2、设计模式 设计这个项目的一种方式。
3、简单工厂设计模式
4、值类型在复制的时候,传递的是这个值得本身。 引用类型在复制的时候,传递的是对这个对象的引用。 5、序列化:就是将对象转换为二进制 反序列化:就是将二进制转换为对象 作用:传输数据。 序列化: 1)、将这个类标记为可以被序列化的。 6、partial部分类
7、sealed密封类 不能够被其他类继承,但是可以继承于其他类。
8、接口 [public] interface I..able { 成员; }
接口是一种规范。 只要一个类继承了一个接口,这个类就必须实现这个接口中所有的成员
为了多态。 接口不能被实例化。 也就是说,接口不能new(不能创建对象)
接口中的成员不能加“访问修饰符”,接口中的成员访问修饰符为public,不能修改。
(默认为public) 接口中的成员不能有任何实现(“光说不做”,只是定义了一组未实现的成员)。
接口中只能有方法、属性、索引器、事件,不能有“字段”和构造函数。
接口与接口之间可以继承,并且可以多继承。
接口并不能去继承一个类,而类可以继承接口 (接口只能继承于接口,而类既可以继承接口,也可以继承类)
实现接口的子类必须实现该接口的全部成员。
一个类可以同时继承一个类并实现多个接口,如果一个子类同时继承了父类A,并实现了接口IA,那么语法上A必须写在IA的前面。
class MyClass:A,IA{},因为类是单继承的。
显示实现接口的目的:解决方法的重名问题 什么时候显示的去实现接口: 当继承的借口中的方法和参数一摸一样的时候,要是用显示的实现接口
当一个抽象类实现接口的时候,需要子类去实现接口。
01复习
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.IO; 7 namespace _01复习 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 /* 14 泛型集合 15 * List<T> 16 * Dictionary<T,T> 17 * 装箱和拆箱 18 * 装箱:将值类型转换为引用类型 19 * 拆箱:将引用类型转换为值类型 20 * 我们应该尽量避免在代码中发生装箱或者拆箱 21 * 文件流 22 * FileStream StreamReader和StreamWriter 23 * 多态:虚方法、 24 * //抽象类、接口 25 * 虚方法: 26 * 抽象类: 27 28 */ 29 List<int> list = new List<int>(); 30 31 //Dictionary<int, string> dic = new Dictionary<int, string>(); 32 //dic.Add(1, "张三"); 33 //dic[2] = "李四"; 34 //foreach (KeyValuePair<int,string> kv in dic) 35 //{ 36 // Console.WriteLine("{0}-----{1}",kv.Key,kv.Value); 37 //} 38 //Console.ReadKey(); 39 40 //File FileStream StreamReader StreamWriter 41 //using (FileStream fsRead = new FileStream("0505远程版机器码.txt", FileMode.OpenOrCreate, FileAccess.Read)) 42 //{ 43 // byte[] buffer = new byte[1024 * 1024 * 5]; 44 // //本次读取实际读取到的字节数 45 // int r = fsRead.Read(buffer, 0, buffer.Length); 46 47 // //将字节数组中的每个元素按照我们指定的编码格式解析成字符串 48 // string s = Encoding.Default.GetString(buffer, 0, r); 49 // Console.WriteLine(s); 50 //} 51 //Console.ReadKey(); 52 53 using (FileStream fsWrite = new FileStream(@"new.txt", FileMode.OpenOrCreate, FileAccess.Write)) 54 { 55 string s = "abc"; 56 byte[] buffer = Encoding.UTF8.GetBytes(s); 57 fsWrite.Write(buffer, 0, buffer.Length); 58 } 59 Console.WriteLine("OK"); 60 Console.ReadKey(); 61 62 63 64 65 66 67 //虚方法和抽象类 68 69 //老师可以起立 学生也可以起立 校长也可以起立 70 71 //声明父类去指定子类对象 72 73 Person p = new HeadMaster();//new Teacher();//new Student(); 74 p.StandUp(); 75 Console.ReadKey(); 76 77 } 78 } 79 80 81 public abstract class Person 82 { 83 public abstract void StandUp(); 84 } 85 86 public class Student : Person 87 { 88 public override void StandUp() 89 { 90 Console.WriteLine("学生起立,说老师好"); 91 } 92 } 93 94 95 public class Teacher : Person 96 { 97 public override void StandUp() 98 { 99 Console.WriteLine("老师起立,说校长好"); 100 } 101 } 102 103 public class HeadMaster : Person 104 { 105 public override void StandUp() 106 { 107 Console.WriteLine("校长起来说领导好"); 108 } 109 } 110 111 112 113 }