文档库

最新最全的文档下载
当前位置:文档库 > C#语言 面向对象特性

C#语言 面向对象特性

面向对象编程的三大特征:
封装、继承、多态

一、封装:隐藏某个对象的与其基本特性没有很大关系的所有详细信息的过程。
通过访问符实现
private(本类私有)、public(所有类可以共享)、protected(保护-本类和其子类可以共享)、internal(同一个项目共享)

二、继承:
1。 在类中存在4中关系:继承关系、组合关系、利用关系、实例化关系

如: 驾驶员 汽车 宝马轿车 轮胎 我的宝马轿车

2。一个类可以将其属性和方法派生给其他类,该类叫基类(父类/超类),派生出的类叫派生类(子类)
3。 基类中的哪些属性和方法可以被派生?

4。构造函数的调用顺序:先调用基类的构造函数再子类的构造函数

抽象基类:当基类中的某个函数函数体无法实现时声明称抽象函数,

抽象函数语法:
访问符 abstract 返回类型 函数名(参数);//没有函数体

当类中的某个函数为抽象函数时,该类必须是抽象的,不能创建抽象类的实例

抽象函数在子类中必须实现函数体
子类中实现时:
访问符 override 返回类型 函数名(参数)
{...}

5.虚函数:
如果基类的中的某个函数允许子类重写该函数的功能,则该函数应该声明为虚函数
属性、方法、函数都可以声明为virtual
成员变量和静态函数、构造函数不能声明为virtual
语法:
访问符 virtual 返回类型 函数名(参数)
{...}

在子类中重写时:

访问符 override 返回类型 函数名(参数)
{...}

继承的好处:
1。重用代码
2。统一的接口
3。容易维护

三、多态—静态多态和动态多态

1。静态多态:静态多态指一个实体,它同时存在于各种形式中.通过函数重载实现
函数重载是为类中的两个或多个函数使用同一名字的过程
函数重载的条件:
函数名相同的函数必须满足:函数的参数数量不同 或 参数类型不同 或参数顺序不同

int sum(int a,float b)
int sum(int a,int b,int c)
float sum(float a,float b)
void sum(float a,int b)
double add(double a,double b)

2.动态多态
动态多态中,函数执行的决定是在运行时进行的

C#使用两种方法来实现动态多态:抽象类和 虚函数

class A
{
private int a1;
protected int a2;

public A(int a1,int a2)
{
this.a1=a1;
this.a2=a2;
}
public virtual void Display()
{
Console.WriteLine("a1={0},a2={1}",a1,a2);
}

}

class B:A
{
private int b1;
public B(int a):base(0,a)
{ }
public B(int a2,int b):base(0,a2)
public override void Display()
{
base.Display();
Console.WriteLine("b1={0}",b1);
}

}
A a=new A();

a.Display();

a=new B(10);

a.Display();


四、接口
接口在你想让后面的类都遵守标准的

函数结构的时候被使用,这里类将实现功能
接口定义属性、方法和事件,它们被称为接口的成员。
interface关键字声明接口。
接口成员总是公有的。
你可以仅在接口中声明方法、函数和属性。你不能在接口中声明变量。
接口声明方法,它被类实现。类可以从单个类继承但可以实现多个接口。
多个无关的类可以实现同一个接口
捕获无关联类的相似性,而无须加强类关系
如:
<>
Runner

+start()
+run()
+stop()

Person

+start()
+run()
+stop()
+dance()

Car

+start()
+run()
+stop()
+fillFuel()
+crack()

Bird

+start()
+run()
+stop()
+fly()