声明:本文章是为一个朋友而写的,昨天朋友遇见了问题,今天自己思考后,发现问题的本质就是面向对象的3大特性,所以才有了本文……
只要是有过学习高级编程语言的同学应该都知道面向对象这个思想(所谓的高级语言是只:C#/Java/C++,至于c语言是底层语言,底层语言的难度更高……)。
面向对象的3 大特性封装、继承、多态。咱们今天用代码的形式来解释一下这名声赫赫的3大特性。
1、 封装:大家装软件、游戏、甚至操作系统经常会遇见dll的文件,这其实就是封装好的代码,你看不见具体的代码,在程序运行的时候,代码会自己根据规则进入对应的dll文件来获取相应的代码来执行,我做了一个小例子如下:
对家关注一下大红对勾的地方,Helper是一个类库的项目,怎么看看类库项目的输出是啥
大家看到了输出类型是【类库】,也就是咱们文章开头提到的dll文件。接下来看看FatherClass这个项目(也是一个类库),这个项目的引用中大红对勾的Helper就是咱们Helper项目。那么结论来了:将一些类放在一个类库项目中,类库项目输出为dll文件,再将该文件引用于其他项目这就是对代码的封装(还有一种封装是将属性、方法封装于一个类中,今天对这种封装不做讨论)。
2、继承:
在我的解决方案中有2个类库项目,下图打对沟的
FatherClass项目中有一个类FatherClass1,而ChildrenClass项目中有一个类ChildrenClass1,该类就继承自FatherClass1,看代码:
这样一来ChildrenClass1这个子类就拥有了FatherClass1父类中的所有方法:
这就是继承性,子类中可以啥都不写,只要他有父类,那么即使子类中什么属性和方法都没有,但是你在访问它时,你会发现,只要是它的父类有的它自己全都有(当然有一些属性和方法的访问级别会导致子类无法拥有,但这里不做讨论这种情况)
3、多态:
我们的子类将父类的FatherAdd这个方法重写了(相当于覆盖父类的方法体内容),因为在
父类的FatherAdd方法前有关键字virtual,这是虚方法的意思。
public virtual int FatherAdd(int i)
{
int x= Helper.Helper1.Add(i) + FatherInt;
return x;
}
咱们看看子类是怎么重写的:
public override int FatherAdd(int i)
{
return i + ChildInt;
}
看完代码,我们发现这里有一个关键字override,这正是重写的关键字。如果FatherClass1这个父类,有很多字子类,那么每一个子类都可以对FatherAdd这个方法重写(因为该方法是虚的),这样就体现了在继承过程中发生了多态这一现象(一句大家都听过的话——龙生九子各不相同,说的就是多态。)
下面我用流程图整体的说一下我写的这个demo.W君可以从这里开始看:
这个解决方案有4个项目前3个是类库,第4个是exe.他们之间的调用关系:
WindowEXE应用程序调用ChildrenClass和FatherClass
ChildrenClass调用FatherClass
FatherClass调用Heleper
其中ChildrenClass这个类库就是你要新建并且编码的类库,编写完成后的类库生成dll文件,放入exe程序的调用dll的路径下面。