c#复习
1、进程
1个应用程序就是一个进程,一个进程又是由多个线程组成的,进程帮助我们在内存中分配应用程序执行所需要的空间,我们可以通过进程来直接操作应用程序。
1 private void button1_Click(object sender, EventArgs e) 2 { 3 #region 1//存储着当前正在进行的进程 4 //Process[] pro = Process.GetProcesses(); 5 //string s = ""; 6 //foreach (var item in pro) 7 //{ 8 // s += item.ProcessName; 9 //} 10 //MessageBox.Show(s); 11 #endregion 12 13 #region 2//使用进程来打开应用程序 14 //Process.Start("calc");//打开计算器 15 //Process.Start("notepad");//记事本 16 #endregion 17 18 //#region 使用进程打开文件 19 //ProcessStartInfo psi = new ProcessStartInfo(@"D:\study\ae\codeTest\进程\2反射.exe"); 20 //Process pro = new Process(); 21 //pro.StartInfo = psi; 22 //pro.Start(); 23 //#endregion 24 25 }
2、关键字
1)new:创建对象 在堆中开创空间,在开辟的空间中创建对象,调用父对象 的构造函数
隐藏父类的成员
2)this:当前对象
3)base:父对象
3、封装继承和多态
1)封装:函数的封装,减少冗余代码, 将很难理解的功能封装在一起,但是对外提供了一个很简单的接口,供我们使用
2)继承:减少冗余代码,让类与类产生了关系,为多态打下了基础
特性:单根性,一个子类只能有一个父类,
传递性,类的传递
//里氏转换:子类可以赋值给父类,如果父类中封装的是子类对象,则可以把父类转换为对应的子类对象
is,和as
作用,可以将所有的子类当做父类来看,针对父类进行编程,写出通用的代码,适应需求的不断变化
1 Animal a = new Cat(); 2 //is a 3 if (a is Cat) 4 { 5 ((Cat)a).Bark(); 6 } 7 else 8 { 9 MessageBox.Show("转换失败"); 10 } 11 //c为一个对象Cat或者为null 12 Cat c = a as Cat; 13 if (c != null) 14 { 15 c.Bark(); 16 }
3)多态:不同的对象收到相同消息时,会产生不同行为,同一个类在不同场合下表现出不同的行为特征
作用:可以将所有的子类当做父类来看,屏蔽不同子类对象之间的差异,针对父类进行编程,写出通用的代码,适应需 求的不断变化
//虚方法:Virtual override
//抽象类:abstract override
//接口:interface
class Employee { public virtual void Daka() { MessageBox.Show("员工九点打卡"); } } class Manager:Employee { public override void Daka() { MessageBox.Show("经理十一点打卡"); } } class Programmer:Employee { public override void Daka() { MessageBox.Show("程序员不需要打卡"); } }
(1)抽象类不允许创建对象 虚方法和抽象类(父类可以创建对象,并且父类方法有意义)
(2)抽象成员必须标记为abstract,并且不能有任何实现(连大括号也不能有)
(3) //抽象成员必须在抽象类中,抽象类不能被实例化
(4)子类继承抽象类后,必须把父类中的所有抽象成员都重写(除非子类也是抽象类,则可以不重写)
(5)抽象成员不能是private
(6)抽象类中可以包括实例成员,供子类用,且可以不用重写
(7)抽象类是由构造函数的,供子类调用
1 abstract class Animal 2 { 3 //抽象方法 ,父类没有办法确定子类如何去实现 4 public abstract void Bark(); 5 public void Eat() 6 { 7 MessageBox.Show("舔着吃"); 8 } 9 10 public void Drink() 11 { 12 MessageBox.Show("舔着喝"); 13 } 14 15 } 16 17 //子类继承了抽象类,必须重写抽象类的所有方法 18 class Cat:Animal 19 { 20 public override void Bark() 21 { 22 MessageBox.Show("喵喵"); 23 } 24 25 26 27 } 28 29 class Dog:Animal 30 { 31 public override void Bark() 32 { 33 MessageBox.Show("汪汪"); 34 } 35 36 } 37 38 class Pig:Animal 39 { 40 public override void Bark() 41 { 42 MessageBox.Show("嗯嗯"); 43 } 44 45 }
接口:(1)接口是一种能力,也是一种规范,如果继承了这个接口,就必须按照接口的要求来实现这个接口
(2)接口的功能要单一,接口不能被实例化,因为和抽象类一样,创建没有意义
(3)接口中的成员不能加访问修饰符,默认为public,不能修改
(4)接口中有方法、属性、索引器,不能有字段和构造函数
(5)接口不能继承一个类,但可以继承接口
(6)实现接口和显示实现接口(这个函数才是接口的,不是类的)
(7)抽象类的接口应有子类实现接口,尽量不要让父类去继承接口
4、访问修饰符
public 任何地方都可以访问
private 私有的,只能在当前类的内容访问
internal 只能在当前程序集中访问
protected 可以在当前类以及该类中的子类中访问
1 class Person 2 { 3 private string _name; 4 public int _age; 5 protected char _gender; 6 internal int _chinese; 7 protected internal int _math; 8 } 9 10 class student:Person 11 { 12 public void test() 13 { 14 // _age 15 //_gender 16 // _chinese 17 //_math 18 } 19 }
5、索引器
1 class person 2 { 3 Dictionary<string, string> dic = new Dictionary<string, string>(); 4 public string this[string index] 5 { 6 get { return dic[index]; } 7 set { dic[index] = value; } 8 } 9 }

浙公网安备 33010602011771号