蓝色的天空--勿在浮沙筑高台
博客园
社区
首页
新随笔
联系
管理
订阅
随笔- 12 文章- 0 评论- 20
C#中“覆盖”和“隐藏”的区别
在C#中,如果一个类的某个方法加了vitual的描述符,那么表示你可以在这个类的子类中重新实现该方法。Java中没有这么多废话,一个public或者protected方法不需要添加其它的描述符就可以在子类中被覆盖。
class
Program {
static
void
Main(
string
[] args) {
Children c
=
new
Children();
Console.WriteLine(c.GetNumber());
Console.WriteLine(((Father)c).GetNumber());
}
}
class
Father {
public
virtual
int
GetNumber() {
return
1
;
}
}
class
Children : Father {
public
override
int
GetNumber() {
return
2
;
}
}
结果:
2
2
如果我们去掉Father类中GetNumber()方法的vitual描述符,那么在编译程序的时候会报错:
错误
1
“ConsoleApplication5.Children.GetNumber()”: 继承成员“ConsoleApplication5.Father.GetNumber()”未被标记为
virtual
、
abstract
或
override
,无法进行重写 D:我的文档Visual Studio
2005
ProjectsWindowsApplication1ConsoleApplication5Program.cs
23
29
ConsoleApplication5
这说明,如果在C#程序中,如果不在父类的方法中添加virtual、abstract或者override描述符,那么编译器就会认为你不想在子类中覆 盖这个方法。如果我们同时去掉Children类中GetNumber()方法的override描述符,程序可以编译通过,但是这时就不是覆盖了,而是 C#中的“隐藏”关系。“隐藏”和“覆盖”具体区别就是,如果是“隐藏”,那么在通过Father类型的引用调用一个Children对象的 GetNumber()方法的时候,实际执行的部分是父类中的GetNumber()方法,而不是子类的。
因此,可以简单的这么理解,“覆盖”就是重新实现了父类的方法,而“隐藏”只是把父类中的方法藏了起来,通过父类的引用来调用这个方法的时候,这个被“隐藏”的方法就被激活了。
class
Program
{
static
void
Main(
string
[] args)
{
Children c
=
new
Children();
Console.WriteLine(c.GetNumber());
Console.WriteLine(((Father)c).GetNumber());
}
}
class
Father
{
public
int
GetNumber()
{
return
1
;
}
}
class
Children : Father
{
public
int
GetNumber()
{
return
2
;
}
}
结果:
2
1
Tag标签:
覆盖
,
隐藏
posted @ 2008-07-06 21:06
Ethan
阅读(167)
评论(0)
编辑
收藏
所属分类:
开发技术
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
网站首页
新闻频道
社区
小组
博问
网摘
闪存
找找看
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
相关文章:
[你必须知道的.NET] 第十五回:继承本质论
new 修饰符是起什么作用?
关于IE问题,请教和求救
C#下如何实现服务器+客户端的聊天程序
Google Chrome浏览器隐藏命令大揭秘
Google Gears覆盖四大浏览器 Safari版推出
诚邀有精通.NET技术的项目经理加盟!!!广州猎头职位!!
二次创业:寻找.net产品研发经理,有前景的产品,资金市场不存在问题
相关链接:
所属分类的其他文章:
C#中的函数委托
如何让ComboBox的下拉列表宽度自适应内容的宽度
避免对C#中float,double,decimal的错误理解
C#中“覆盖”和“隐藏”的区别
最新IT新闻:
金融风暴改写富豪榜排名 巴菲特资产超盖茨
红杉资本发出严重警告:黄金时代已成历史
2008年10月11日科技博客精选
搞死开心网还是搞活他?
网络书店“新”军
<
2008年7月
>
日
一
二
三
四
五
六
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
给我留言
查看留言
我的标签
Windows via C/C++(1)
覆盖(1)
隐藏(1)
Anders Hejlsberg(1)
decimal(1)
随笔分类
开发技术(4)
(rss)
其它(7)
(rss)
数据库
(rss)
系统维护(1)
(rss)
随笔档案
2008年8月 (2)
2008年7月 (8)
名人博客
Joel Spolsky的博客
Joel Spolsky (born 1965) is a software engineer and writer. He is the author of Joel on Software, a blog on software development targeted mainly at writers of Windows software. He was a Program Manager on the Microsoft Excel team between 1991 and 1994 and later founded Fog Creek Software.
朋友
小龙的Qzone
最新评论
阅读排行榜
1. Firefox的刷新功能与Safari,IE的差距(980)
2. 避免对C#中float,double,decimal的错误理解(448)
3. 如何让ComboBox的下拉列表宽度自适应内容的宽度(238)
4. Windows 2003 标准版_企业版_SP1_SP2_R2的区别(221)
5. 《Windows via C/C++》简介(197)
评论排行榜
1. Firefox的刷新功能与Safari,IE的差距(13)
2. 《Windows via C/C++》简介(3)
3. 避免对C#中float,double,decimal的错误理解(3)
4. 如何让ComboBox的下拉列表宽度自适应内容的宽度(1)
5. 【转】Joel Spolsky在耶鲁大学的演讲(0)