C#面向对象学习笔记

课程一:面向对象的概念。

英文缩写: OOP

面向对象只是面向过程的一个补充,而不是取代面向过程。

 

类、对象。类是抽象的,对象是具体的。 人是一个类,某一个人是“人”这个类的对象。和类相关的变量叫做字段,是类的状态。类是不占内存的,对象才占内存。

方法:就是类能够执行的动作,比如问好、吃饭。

类的继承:类之间可以有继承关系。比如电脑类可以从电器类继承,这样做的好处是“电脑”类,只需要定义自己特有的字段、方法就可以啦。

面向对象的三个特征:封装、继承、多态。

 

课程二:定义类。

看看这个程序,基本上包含了类的定义,类的对象的声明、对象的字段的赋值等等。

 

 

 

 

 

课程三:类的成员访问级别.

 

在定义类的成员是,前面有一个关键字,例如上面的publicPublic就是指公开的意思,在程序的任意地点都可以改变该成员的值。

还有一个访问级别限制关键字:private 只能在类里面才能够改变其值。

看看这个函数:

 

如果类里面的“方法”中参数更类的成员重名。要用this.name来指定哪个名字是类的成员名而不是参数名。看看下面的一个类的定义。其实,不同名也是可以用this关键字的。

 

 

课程四:面向对象 属性。

简化字段的引用和赋值:因为,为了避免字段被擅自更改,字段要设为private

然后针对某这字段设置属性。属性里面有set get 两个动作,可以改变字段的值。

 

 

 

课程五:构造函数:

构造函数是类的一个函数。例如在声明类的一个对象是:Persion p1=new Person();

Person是一个类。P1是类的对象。

Person()就是person这个类的构造函数。默认是没有参数的。

但是如果你希望你声明的类的某个某个对象有初始值,就可以声明构造函数并传参数进去。构造函数可以有重载。看看下面的程序:

 

 

 

这里说明一下,上面函数的Gender性别显然是不可以被外界更改的。所以不能用{setget;}这样的话,就必须用传统的:

 private Gender  gender;

 public Gender gender

   {

     get{return this.gender;}

   }

 

还有,在看看上面函数的两个构造函数,里面赋值字段的代码存在冗余,这不符合编程原则DRYDon’t Repeat Yourself)。如何解决呢,可以使用函数的嵌套调用。

如下所示:

构造函数的嵌套调用:在一个函数的后面加“:this(参数)

 

课程 6 :类的继承。 主要作用是类的属性、方法的重用。例如:首先定义一个Person类,如果需要再定义一个Chinese类。那么“中国人”类就可以从“人” 类中继承字段、属性、方法的。例如下面一段代码:

 

 

 

 

如果一个类,没有定义父类,则它默认为object类。Object 是任何类的直接或间接父类。

子类在继承父类的一个方法的时候,不能够默认继承,因为在子类中用继承下来的方法可能是不合适的,需要更改这个方法。怎样更改呢。

首先在父类的方法前要加virtual关键字。

 

 

在子类中的方法:

 

 

Chinese类是Person类的子类,Person类是object类的子类。而object是支持.ToString方法的。

所以,Person,Chinese类也是支持的。可以用覆盖的方法,改变.ToString方法的行为。例如可以在Person 类中覆盖object类的.ToString方法。

 

在C#中,一个类只允许有一个父类。而在C++中是可以有多个父类的。

 

父类声明的一个构造函数,子类能否继承呢。如果可以那又该怎样做。

构造函数是不能够继承的,每个子类都必须自己声明构造函数。

 

虽然不能够继承,但是子类可以调用父类的构造函数 。

Person 父类中声明构造函数。

 

子类Chinese中声明构造函数:

 

构造函数的使用。

 

 

 

课程七:多态

一个父类的指针,可以指向其子类的一个对象。

例如:Person p1=new Chinese();

      P1.SayHello();//如果子类和父类中有SayHello方法这是正确的引用。

如果只是子类中有这个方法,而父类中不确定有没有这个方法,则是错误的。

 

 

 

课程八:多态的好处。

 

posted @ 2011-04-16 23:51  GY小小鸟  阅读(558)  评论(0编辑  收藏  举报