当前在线人数16251
首页 - 分类讨论区 - 电脑网络 - 窗口里的风景版 -阅读文章
未名交友
[更多]
[更多]
文章阅读:Re: C#的new在method declaration里有和没有有啥区别么
[同主题阅读] [版面: 窗口里的风景] [作者:depend] , 2007年08月10日19:35:40
depend
进入未名形象秀
我的博客
[上篇] [下篇] [同主题上篇] [同主题下篇]

发信人: depend (depend), 信区: DotNet
标  题: Re: C#的new在method declaration里有和没有有啥区别么
发信站: BBS 未名空间站 (Fri Aug 10 19:52:16 2007), 转信

C#里的New是用来解决不同Library之间versioning问题的。

比如WinForm有Button,你想做一个Image Button,于是你从Button派生了一个类。
public class ImageButton : Button
{
  public virtual void LoadImage(fileName : String);
}
然后你这个自定义按钮就被大量的使用在程序里,Perfect!

然后某一天,.NET 4.0发布了,其中扩充了Button按钮,在里面加了一个方法,而这个
方法正好也叫LoadImage(没办法,微软又不知道用户会怎么扩充这些类)
public class Button
{
  public virtual void LoadImage(fileName : String);
}
结果现在的问题就是你的程序没办法编译了,因为你的LoadImage掩盖了Button里的
LoadImage方法。这时你有几个选择,你可以删掉你自己的LoadImage方法,然后祈祷
微软提供的方法正好满足你的要求,你当然也可以把你自己的LoadImage改名,然后
refractor所有引用的代码,当然,你也可以选择使用这个“狗屁不通”的new关键字
来告诉编译器这个方法的根不是Button.LoadImage,而是ImageButton.LoadImage。

因此,new关键字其实只在很罕见的情况下才有用,但是它还是有用的,至少是C#自己
的versioning策略,而如果代码里大量出现new,那就是被滥用了。

【 在 bruklyn (我爱布鲁克林) 的大作中提到: 】
: 除了没有new给一个warning外,跟没有是不是完全一样?
: 恨死这个new了,狗屁不通。人都说尽量不要定义跟基类重名的non-virtual class。
: C#给你搞出个new,傻不傻啊,干嘛用啊,给人笑话的吧。



--

※ 来源:·BBS 未名空间站 海外: mitbbs.com 中国: mitbbs.cn·[FROM: 67.85.]

[上篇] [下篇] [同主题上篇] [同主题下篇]
[转寄] [转贴] [回信给作者] [修改文章] [删除文章] [同主题阅读] [从此处展开] [返回版面] [快速返回] [收藏] [举报]
 
回复文章
标题:
内 容:

未名交友
将您的链接放在这儿

友情链接


 

Site Map - Contact Us - Terms and Conditions - Privacy Policy

版权所有,未名空间(mitbbs.com),since 1996