面向对象

封装性,继承性,多态性。

封装性

封装:将类的内部结构隐藏起来。

实现方法之一:访问修饰符

public, 无限制,公有的

protected internal,

internal, 允许项目或内部的类来访问

protected , 子类可以完全访问基类。

private 只允许同一类中成员访问。(默认的访问修饰符)

继承性

子类可以有能力直接从基类中获得其所有代码和数据,而且还可以定义自身的成员。

Public class lnsuranceAccount : Account 左边是子类,右边是基类

C#中只支持单继承

防止继承:public sealed class XX

派生类可以调用基类的方法

通过使用base关键字

派生类在访问基类的时候有一定的限制,不能访问private中的成员;internal的基类成员只能被同一类中的派生类访问。

Public class Account

{

Public double balane ;

Public bool Withdraw(double amt)

{

Balance -= amt;

Return true;

}

}

Public class CheckAccount : Account

{

Public bool Withdraw(double amt)

{

If(amt <= base.balance)

Return base.Withdraw(amt)

Else

Return false;

}

}

//CheckAccount是子类,Account是基类。

对象引用:

checkAccount ca = new CheckAccount();

Account acc = new CheckAccount(); 基类的对象指针可以实现子类的实例化

 //子类中肯定包含基类成员,而基类成员不一定包含有子类中的成员。

Solution :数据类型转换

Account acc = new CheckAccount()

CheckAccount chk = acc // Error

CheckAccount chk = (CheckAccount)acc //OK

如果acc不是CheckAccount的对象,那么运行时就会抛出System.InvalidCastException

何时使用继承

1, 代码重用,减少编写的代码量

2, 设计重用:公用的字段和方法可以放到父类中,然后由其派生新的子类,子类有自己的字段和方法。

3, 经验而言------“is a”的关系:

如果A类是从B类中继承而来,即A是B的子类,那么我们可以说class A is a Class B

多态性

在运行时,可以通过指向基类的引用,来调用实现派生类中的方法。

//在运行时,可以通过指向基类的引用,来调用实现派生类中的方法。
//当然,如果它们都继承自某个类,你可以把这些派生类,都放到一个数组中。
//如果这些对象都有同名方法,就可以调用每个对象的同名方法。

同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。

//在面向对象的系统中,多态性是一个非常重要的概念,它允许客户对一个对象进行操作
//,由对象来完成一系列的动作,具体实现哪个动作、如何实现由系统负责解释。

多态性通过派生类覆写基类中的虚函数型方法来实现。

编译时的多态性

编译时的多态性是通过重载来实现的。

对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。

运行时的多态性

运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。

C#中,运行时的多态性通过覆写虚成员实现。

编译时的多态性为我们提供了运行速度快的特点,而运行时的多态性则带来了高度灵活和抽象的特点。

重载(overload):类中定义的方法可能有不同的版本

public bool Withdraw(double amt,string name)

public double Withdraw(double amt)

特点:方法名必须相同,参数列表必须不相同,返回值类型可以不相同

虚拟函数:使用virtual关键字 public virtual bool withdrow(…)

调用虚方法,运行时将确定调用对象是什么类的实例,并调用适当的覆写的方法

虚方法可以有实现体

覆写(override):子类中为满足自己的需要来重复定义某个方法的不同实现

通过使用关键字override来覆写

Public override bool Withdraw(…)

只有虚方法和抽象方法才能被覆写

要求:相同的方法名称,相同的参数列表,相同的返回值类型。

clip_image002

抽象方法:生必须被派类覆写的方法,可以看成是没有实现体的虚方法。

如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法

Public abstract bool Withdraw(…)

接口:为类提供了蓝图,只提供定义,实现接口的数据类型必须提供接口成员的实现,接口本身可以从多个基接口派生。

使用interface关键字

Public interface IAccount 

{

Void Method1();

String Method2(int x, int y)

}
Public class InsuranceAccount: IAccount

{

Void Method1()

{

….

}

String Method2(int x, int y )

{

…

}

}

总结:

1.访问限制

2.继承和接口是互补的

Øis-a”—— inherits

Øacts-like”—— implements

Ø设计中经常是两者都使用的

3.覆写和重载

ØOverride & Overload 的区别

4.虚方法和抽象方法区别

其他参考资源

1.Webcast:

§http://www.microsoft.com/china/msdn/events/webcasts/shared/Webcast/MSDNWebCast.aspx

2.Resources:

§MSDN Library http://www.microsoft.com/china/MSDN/library/default.mspx

§GotDotNet

http://www.gotdotnet.com

MSDN flash:

§http://www.microsoft.com/china/newsletter/case/MSDN.asp

clip_bullet001[12]

原文地址:https://www.cnblogs.com/HuXiaoxia/p/3399721.html