面向对象不是取代面向过程的
类、对象。"人"是类,"张三"是人这个类的对象。
类是抽象的,对象是具体的。按钮就是类,某个按钮就是对象。对象可以叫做类的实例。类就像int,对象就像10.字段field(和某个对象相关的变量),字段就是类的状态。人这个 类有姓名、年龄、身高等字段。类不占内存,对象才占内存。
方法:方法就是累能够执行的动作,比如问好、吃饭等。
类的继承,类之间可以有继承关系,比如电脑类可以从"
电器"类继承,这样的好处是"电脑"类只需要定义自己特有的字段、方法就可以,也就是只要定义了内存大小,cpu型号这些字段或者弹出光驱等方法 就可以。父类。基类。电脑类是电器类的子类。重用。
面向对象的三个特征:封装、继承、多态。
没有现象对象的世界中的难题。
成员访问级别
字段、方法、属性都可以叫做类的成员,他们都需要定义访问级别。访问级别的用处在于控制成员在哪些地方可以被访问,这样达到面向对象中"封装"的目的
几个访问级别:public(任何地方都可以访问);privae(默认级别。只能由本类中的成员访问)。还有internal/protected两个级别,以后会讲。
class Person{
private string Name;
public void GiveName(string name){
Name=name;//拒绝不好听的名字
}
public void SayHello(){
Console.WriteLine("你好,我是{0}",Name);
}
}
Person tom=new Pewson();
tom.GiveName("tom");
//tom.Name="tom";
tom.SayHello();
永远不要把字段public
属性
惯用法:属性开头字母大写,字段开头字母小写
class Person
{
private int age;
public int Age
{
get{return age;}
set{age=value;}
}
public void SayHello()
{
Console.WriteLine("我的年龄是{0}",Age);
}
}
只用set或者只用get就可以定义只读或者只写属性(只写的不常见)
可以为set、get设置访问级别
例子,限制非法值的设置
字段和属性的区别是什么?属性看似字段、不是字段,可以进行非法值控制,可以设置只读。
set/get块内部其实就是get_***/set_***方法。
面向对象04
面向对象版聊天机器人
机器人呢有不同的名字、维护自己的FullLevel,可以SayHello(我叫***),可以喂食(Eat(int foodCount)),可以对它说话(Speak),对异常情况(错误的喂饭数字,喂得太多会撑死了)进行处理,有两个机器人供选择,一开始通过1、2数字选择聊天机器人。
Reflector 反编译器在vs的什么地方,怎么找不到呀?
面向对象编程基础8 构造函数
构造函数用来创建对象,并且可以在构造函数中对对象进行初始化
构造函数式用来创建对象的特殊函数,函数名和类名一样,没有返回值,连void都不用。
构造函数可以有参数,new对象的时候传递函数参数即可
构造函数可以重载,也就是有多个参数不同的构造函数。
如果不指定构造函数,则类有一个默认的无参构造函数。
如果指定了构造函数,则不在有默认的无参构造函数,如果需要无参构造函数,则需要自己来写。
面向对象编程基础10 继承
public class Chinese Person
{
public string HuKou{get;set;}
public void KongFu(){......}
}
Chinese p1=new Chinese();
p1.Name="李雷";
p1.HuKou="北京朝阳区";
p1.SayHello();
p1.KongFu();
定义类的时候不指定父类,则父类是Object类,Object类是任何类
的直接或者间接父类。
异常与异常处理
传统的错误表示方式:错误码。举例。需要知道不同错误码的含义,如果不处理错误码,则程序可能陷入不可以预知的错误。
错误码的缺点::不处理则很难发现,每次处理则很麻烦;
难以看出错误的原因;容易使得程序进入不确定状态。
try catch.Exception ex异常也是对象。
Exception 类主要属性:Message/StackTrace
发生异常后程序默认就退出了,后续代码不会执行。
catch以后的代码则会继续执行。
不要吃掉异常
扔出自己的异常
常量与静态成员
Const常量。常量名要大写。一定不会变的声明成常量。
全局变量。static类变量。
不用new就能用的方法:static方法,static方法其实就是普通函数。
在static 方法中可以调用其他static方法、字段、属性。在非static方法中可以调用static的方法、字段。
静态类,不能被new的类就是静态类。静态类一般用来实现一些
函数库。***Helper,SqlHelper,PageHelper
命名空间
namespace(命名空间),用于解决类重名问题,可以看做"类的文件夹"
在代码中使用其他类的时候需要using类所在的namespace.
System.Collections.ArrayList,快速引入的方法,右键--->解析
。
为什么使用Convert/Console等类不需要自己写using?
如果代码和被使用的类在一个namespace则不需要using.
可以修改默认的namespace,因此不要认为在相同文件夹下就不用using,不在相同文件夹下就需要using.
索引器
C#中提供了按照索引器进行访问的方法
定义索引器的方式:string this[int index]{get{return "";}
set {}},string为索引器的类型,[]中是参数列表。进行索引器写操作就是调用set代码块,在set内部使用Value得到用户设置的值;进行读操作就执行get代码块。
索引器参数可以不止一个,类型也不限于int,几乎可以是任意类型