C#是纯面向对象的编程语言,运用面向对象的思想对于编写一个大型工程就显得很是重要。和其余的面向对象语言同样,C#也主要是经过封装(encapsulating)、继承(inheritance)和多态(polymorphism)来实现。程序员
(一)封装正则表达式
客户但愿在不使用方法的状况下访问对象的状态,可是类的设计者却想将类的状态隐藏在类成员中而让客户只能经过方法间接访问对象的状态。属性知足了这两个目的: 经过属性(properties)来封装数据,为客户提供简单的“相似成员变量”的接口;同时为设计者提供了“使用方法来实现”的OO设计所必须的数据隐藏性。编程
经过上一篇博客所讲的get与set控制器咱们能够定义一些存储属性的私有成员,例如:编程语言
能够在get和set前加一些修饰符,如:protected,internal,private,但使用修饰符时,必须get和set访问方法都存在,且只能修饰其中之一。而且修饰符的访问级别要低于属性或索引器的访问级别。internal关键字是类型和类型成员的访问修饰符。只有在同一个程序集的文件中,内部类型或者是成员才能够访问。函数
有时须要使用静态构造方法初始化,但又不但愿数值被改变的时候使用关键字readonly。学习
(二)继承设计
在面向对象的编程中,有两种大相径庭的继承类型:实现继承和接口继承。3d
实现继承:表示一个类型派生于一个基类型,它拥有该基类型的全部成员字段和函数。在实现继承,派生类型采用基类型的每一个函数的实现代码,除非在派生类型的定义中指 定重写某个函数的实现代码。在须要给现有的类型添加功能,或许多相关的类型共享一组重要的公共功能时,这种类型的继承很是有用。指针
接口继承:表示一个类型只继承了函数的签名,没有继承任何实现代码 。在须要指定该类型具备某些可用的特性时,最好使用这种类型的继承。
一些语言(如C++)支持所谓的 “多重继承”,即 一个类派生自多个类。C#不支持多重实现继承。而C#又容许类型派生自多个接口:多重接口继承。这说明,C#能够派生自另外一个类和任意多个接口。更准确地说,由于 System.Object是一个公共的基类,因此每一个C#类(除了Object类以外)都有一个基类,还能够有任意多个基接口。对象
实现继承:
若是要声明派生自另外一个类的一个类,就可使用下面的语法(基类放冒号后面):
这个语法很是相似于C++ 和 Java 中的语法,可是,C++程序员习惯于使用公共和私有继承的概念,要注意不支持私有继承,所以在基类名上没有public 或 private限定符。支持私有继承只会大大增长语言的复杂性。
若是类(或结构)也派生自接口,则用逗号分隔列表中的基类和接口:
把一个基类函数声明为virtual,就能够在任何派生类中重写该函数:
抽象类和抽象函数:
C#容许把类和函数声明为abstract。抽象类不能实例化,而抽象函数不能直接实现,必须在非抽象的派生类中重写。显然,抽象函数自己也是虚拟的(尽管也不须要提供 virtual关键字,实际上,若是提供了该关键字,就会产生一个语法。若是类包含抽象函数,则该类也是抽象的,也必须声名为抽象的:
(三)多态
继承有两各方面的做用最为强大,一方面可让代码有很强的重用性,另外一方面就是多态。
多态就是:容许将子类类型的指针赋值给父类类型的指针。也就是同一操做做用于不一样的对象,能够有不一样的解释,产生不一样的执行结果。在运行时,能够经过指向基类的指针,来调用实现派生类中的方法。
理解多态以前首先要对面向对象的里氏替换原则和开放封闭原则有所了解。
里氏替换原则(Liskov Substitution Principle):
派生类(子类)对象可以替换其基类(超类)对象被使用。通俗一点的理解就是“子类是父类”,当须要一个父类类型的对象的时候能够给一个子类类型的对象;当 须要一个子类类型对象的时候给一个父类类型对象是不能够的!
开放封闭原则(Open Closed Principle):
封装变化、下降耦合,软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。所以,开放封闭原则主要体如今两个方面:对扩 展开放,意味着有新的需求或变化时,能够对现有代码进行扩展,以适应新的状况。对修改封闭,意味着类一旦设计完成,就能够独立完成其工做,而不要对类进 行任何修改。
咱们先来看下怎样用虚方法实现多态:
建立基类Bird以下,添加一个虚方法Eat():
建立子类Magpie以下,继承父类Bird,重写父类Bird中的虚方法Eat():
建立一个子类Eagle以下,继承父类Bird,重写父类Bird中的虚方法Eat():
到此,一个基类,两个个子类已经建立完毕,接下来咱们在主函数中来看下多态是怎样体现的:
这样就会显示各种相应的内容了。
除了经过虚方法实现多态,还有另外两种方法,即利用抽象或者接口来实现多态,在这里就先不介绍了,你们能够查阅相关资料学习这两种实现多态的方法。
关于C#面向对象编程咱们就先介绍到这,下一篇博客为你们介绍C#的字符串与正则表达式。