导航
  • 主页
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm
  • WPF
  • 问答

问几个概念性的问题

peterb 2006-03-19 08:34:54
1.说明继承、重载、覆盖、隐藏和多态的区别。
2.说明C#中多态的条件。
3.说明派生类对象的链式构造和析构过程。
4.什么是密封类和密封方法。
5.Base关键字如何使用。对应与c++是怎么调用基类被隐藏的函数的?
...全文
150 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ice_frank 2006-04-13
UP
回复
huangguangdou 2006-04-13
楼上的说的挺好

up
回复
peterb 2006-04-13
说明继承、重载、覆盖、隐藏和多态的区别。
答:
继承:派生类可以继承除了基类的构造函数和析构函数以外的所有的成员。
重载:函数的参数个数或参数类型不同的而函数名相同的函数称重载。根据参数的不同自动匹配调用。
覆盖/隐藏:
(1)成员变量的覆盖:如果派生类声明了一个和基类同名的成员变量,就是覆盖了基类成员。
(2)成员函数(方法)的覆盖:实际上可以分为两种:普通方法(非虚函数)的覆盖称为隐藏,声明时在派生类中函数头前用关键词new,不能与override同时用;另外一种,就是虚方法的覆盖,真正意义上的函数覆盖。基类中的函数用关键词virtual,派生类中用override。
多态:同一操作作用于不同的类的实例,不同的类将进行不同的解释,最后产生不同的执行结果。基类对象指向派生类对象,基类对象调用虚函数时体现多态,会在运行时决定调用哪个类的函数,即运行时多态。
实际上,只有虚函数才有多态,成员变量不具多态的能力,非虚函数的覆盖函数(即所说的隐藏)在编译时就确定其调用者,即编译时多态,但没有多态的体现。

说明C#中多态的条件。
答:
基类引用指向派生类对象,调用virtual函数,根据运行时确定指向的对象决定调用基类的还是派生类里的函数,实现多态。
只有虚函数的覆盖才有多态的能力,成员变量不具有多态的能力。

说明派生类对象的链式构造和析构过程。
答:
实例化一个派生类的对象时,派生类构造函数在执行它自己的函数体之前,会显示或隐式地调用基类构造函数。
当析够一个派生类对象时,顺序与构造函数执行的顺序相反。先析构自己再析构基类;
N个对象的析构与构造的顺序相反。

什么是密封类和密封方法。
答:
密封类:不允许别的类继承的类。类声明的前面加关键字sealed。
密码方法:对方法可以使用sealed修饰符,这是称该方法是一个密封方法。密封方法是以防止在方法所在类的派生类中对改方法的重载。密封方法必须对基类的虚方法进行重载,提供具体的实现方法。

Base关键字如何使用。对应与c++是怎么调用基类被隐藏的函数的?
答:
C#中:
Base一般用在派生类中(或派生类对象)调用基类的函数或成员时为了区分基类和派生类同名的成员(如成员函数的覆盖或是继承来的成员变量的隐藏);一般格式为: Base.fuction() 或者Base.x (其中function()是基类的成员函数,x是基类的成员变量)。
Eg:
Master从Student派生来,fn()是Student中的函数
Master a;
a.base.fn();
C++中:
对应在c++中格式为:father::function()或者father::x.(father是基类)
Eg: a.Student::fn();

abstract类与具体类的区别,abstract类的作用是什么?
答:
与具体类区别在于:
 抽象类只能作为其它类的基类,它不能被直接实例化,而且对抽象类不能使用new操作符。
 抽象类不能同时又是密封的。
作用:为它的派生类提供一个公共的界面。

interface与abstract类的区别,interface的作用是什么?
答:
区别在于:
 接口继承允许多继承,一个接口可以有多个父接口;而抽象类和普通类只能有一个父类。
 接口里面的只是对函数的说明不包含任何实现(即使是空的{}都不行;而抽象类可以包含部分方法的实现。
 接口一旦创建了就不能更改。
 接口成员声明不能包含很和修饰符。默认的为public.
 实现接口必须实现接口中的所有方法,而继承抽象类的子类可以还是抽象类,可以只实现部分方法。
作用:在组件和组件之间、组件和客户之间都通过接口进行交互。
回复
peterb 2006-03-20
好,回去先查查中文sdk再说,不懂再问各位
回复
kqh0319 2006-03-20
1.说明继承、重载、覆盖、隐藏和多态的区别。
2.说明C#中多态的条件。
3.说明派生类对象的链式构造和析构过程。
4.什么是密封类和密封方法。
5.Base关键字如何使用。对应与c++是怎么调用基类被隐藏的函数的?


MSDN一一有描述和實例,
回复
MonkWang 2006-03-20
学习
回复
tianzhijian 2006-03-20
楼上的说得对,还是先自己看书搞清楚得好。
这样会更有帮助。
回复
達魔 2006-03-20
看你问的几个问题,
我觉得
一:你对C#编程基本不会,
二:你对面向对象编程的思想基本模糊,
三:建议你不要在这发贴,而是找一本书啃啃,因为涉及的内容太多,不可能有谁会在这把东西全写出来的,如果不全写出来,对你还是没有帮助的……
祝你好运,
我想只要你仔细的看书了,这些概念很好懂的……
回复
李洪喜 2006-03-20
看看C#高级编程的前几章吧。说的比较清楚的。
回复
孟子E章 2006-03-19
中文sdk上应该都有的。要理解概念,最好作个例子测试
回复
我看你有戏 2006-03-19
楼上说的我理解了,其他的几点呢,说来听听,
感觉楼上这么一说自己就理解了,书上看了就是糊里糊涂的
回复
peterb 2006-03-19
谢谢zhantianyou() 的回答,大家继续,能够把这些问题搞搞清楚
平时代码写了不少,但是一些概念性的问题,不是很清楚,理解不够
回复
zhantianyou 2006-03-19
继承指一个派生类能够调用基类的所有成员,但重载只的是在同一个类中,可以有多个相同的方法名,在调用时,系统会根据调用参数的不同,自动分配对应的方法!但是参数名类型不能相同,否则会出错
回复
发动态
发帖子
C#
创建于2007-09-28

10.4w+

社区成员

.NET技术 C#
申请成为版主
社区公告

全世界最好的语言,没有之一.