欢迎来到天天文库
浏览记录
ID:11741388
大小:36.00 KB
页数:6页
时间:2018-07-13
《c#面向对象学习心得》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一、封装这是一种隐藏信息的特性。拿本节引例来说,类CalculateDate将数据结构与算法隐藏在类的内部,外界使用者无需知道具体技术实现细节即可使用此类。封装这一特性不仅大大提高了代码的易用性,而且还使得类的开发者可以方便地更换新的算法,这种变化不会影响使用类的外部代码。可以用以下公式展示类的封装特性:封装的类=数据+对此数据所进行的操作(即算法)。通俗地说,封装就是:包起外界不必需要知道的东西,只向外界展露可供展示的东西。在面向对象理论中,封装这个概念拥有更为宽广的含义。小到一个简单的数据结构
2、,大到一个完整的软件子系统,静态的如某软件系统要收集数据信息项,动态的如某个工作处理流程,都可以封装到一个类中。具备这种“封装”的意识,是掌握面向对象分析与设计技巧的关键。二、继承继承是面向对象编程中一个非常重要的特性,它也是另一个重要特性——多态的基础。现实生活中的事物都归属于一定的类别。在一些书中,将父类称为超类(superclass)。“继承”关系有时又称为“派生”关系,“B继承自A”,可以说为“B派生自A”,或反过来说,“A派生出B”。父类与子类之间拥有以下两个基本特性:(1)是一种(IS
3、-A)关系:子类是父类的一种特例。(2)扩充(Extends)关系:子类拥有父类所没有的功能。1.类成员的访问权限面向对象编程的一大特点就是可以控制类成员的可访问性。当前主流的面向对象语言都拥有以下三种基本的可访问性:(1)公有public访问不受限制。(2)私有private只有类自身成员可以访问。(3)保护protected子类可以访问,其他类无法访问。由此可见,可以通过子类对象访问其父类的所有公有成员,事实上,外界根本分不清楚对象的哪些公有成员来自父类,哪些公有成员来自子类自身。小结一下继承
4、条件下的类成员访问权限:(1)所有不必让外人知道的东西都是私有的。(2)所有需要向外提供的服务都是公有的。(3)所有的“祖传绝招”,“秘不外传”的都是保护的。C#中还有一种可访问性,就是由关键字internal所确定的“内部”访问性。internal有点像public,外界类也可以直接访问声明为internal的类或类的成员,但这只局限于同一个程序集内部。读者可以简单地将程序集理解为一个独立的DLL或EXE文件。一个DLL或EXE文件中可以有多个类,如果某个类可被同一程序集中的类访问,但其他程序集
5、中的类不能访问它,则称此类具有internal访问性。internal是C#的默认可访问性,这就是说,如果某个类没有任何可访问性关键字在它前面,则它就是internal的。2.子类父类变量的相互赋值子类对象可以被当成基类对象使用。这是因为子类对象本就是一种(IS_A)父类对象,因此,以下代码是合法的:Parentp;Sonc=newSon();p=c;然而,反过来就不可以,父类对象变量不可以直接赋值给子类变量。如果确信父类变量中所引用的对象的确是子类类型,则可以通过类型强制转换进行赋值,其语法格式
6、为:子类对象变量=(子类名称)基类对象变量;子类对象变量=基类对象变量as子类名称;3.方法重载、隐藏与虚方法调用由于子类对象同时汇集了父类和子类的所有公共方法,而C#并未对子类和父类的方法名称进行过多限制,因此,一个问题出现了:如果子类中某个方法与父类方法的签名一样(即方法名和方法参数都一样),那当通过子类对象访问此方法时,访问的是子类还是父类所定义的方法?让我们先从子类方法与父类方法之间的关系说起。总的来说,子类方法与父类方法之间的关系可以概括为以下三种:(1)扩充(Extend):子类方法,
7、父类没有;(2)重载(Overload):子类有父类的同名函数,但参数类型或数目不一样;(3)完全相同:子类方法与父类方法从方法名称到参数类型完全一样。当子类与父类拥有完全一样的方法时,称“子类隐藏了父类的同名方法,当分别位于父类和子类的两个方法完全一样时,调用哪个方法由对象变量的类型决定。“new”关键字明确告诉C#编译器,子类隐藏父类的同名方法,提供自己的新版本。如果子类隐藏了父类的同名方法,要在子类方法的实现代码中调用父类被隐藏的同名方法时要使用base关键字。如果子类隐藏了父类的同名方法,
8、不进行强制转换,就无法通过父类变量直接调用子类的同名方法,哪怕父类变量引用的是子类对象。这是不太合理的。我们希望每个对象都只干自己职责之内的事,即如果父类变量引用的是子类对象,则调用的就是子类定义的方法,而如果父类变量引用的就是父类对象,则调用的是父类定义的方法。这就是说,希望每个对象都“各人自扫门前雪,莫管他人瓦上霜”。为达到这个目的,可以在父类同名方法前加关键字virtual,表明这是一个虚方法,子类可以重写此方法:即在子类同名方法前加关键字override,表明对父类同名方法
此文档下载收益归作者所有