View Full Version : 一个关于虚方法和抽象方法的问题。


David Zha0
04-11-2007, 02:53 PM
您好,

我最近在一本书上这样说虚方法:“当调用虚方法时,运行时将判断调用虚方法的是什么类的实例,然后调用适当的覆盖方法,可能造成性能的轻微下降”。这种说法正确吗?

另外,在派生类中声明一个与基类中方法签名相同的方法时,不是可以使用new关键字隐藏基类中的方法吗?那么使用虚方法有什么好处?


还有一个关于抽象方法的类似的问题:

我觉得定义在抽象类中的抽象方法与接口很相似啊,它们都不包括方法体、都必须由基类提供实现、并且都不能在派生类中修改方法声明,它们有什么区别?


谢谢您的回答!!!

绉﹂鎰忓姩
04-12-2007, 02:46 AM
David Zha0锛
浣犲ソ銆

绗竴涓棶棰橈細
鍙傝冨井杞叕鍙哥殑<C#璇█鍙傝>锛堟竻鍗庡ぇ瀛﹀嚭鐗堬級绗49-53椤点
virtual鏂规硶鈥滈櫎浜嗗0鏄庡拰璋冪敤璇硶涓嶅悓澶栵紝铏氭嫙灞炴х殑琛屼负鍜屾娊璞℃柟娉曚竴鏍封
鍚屾鐞嗭紝铏氭嫙鏂规硶鍜屾娊璞℃柟娉曚篃姣旇緝鐩镐技锛氬氨鏄竴涓湁榛樿鍊肩殑鎶借薄鏂规硶銆
杩愯鏃惰皟鐢ㄧ殑鏄璞$殑瀹為檯绫诲瀷鐨勬鏂规硶锛屼笉override鏃惰皟鐢ㄧ殑灏辨槸鍘熷鐨勬柟娉曘

姣斿锛
public class Dimensions
{
.....
public virtual double Area()
{
return x*y;
}

}



public class Sphere:Dimensions
{
.....
public override double Area()
{
return 4*PI*x*x;
}

}

閭d箞Dimensions d =new Sphere();

d.Area();璋冪殑鏄疭phere閲嶆柊鍐欑殑鏂规硶


绗簩涓棶棰橈細
鎶借薄绫绘槸鑷冲皯鏈変竴涓娊璞℃柟娉曠殑绫
鎺ュ彛鏄叏閮ㄦ槸鎶借薄鏂规硶鐨勭被

杩欎袱涓蹇典腑鐨勨滄娊璞℃柟娉曗濅竴璇嶆槸涓鑷寸殑


鈥淒avid Zha0鈥濈紪鍐欙細

> 鎮ㄥソ锛
>
> 鎴戞渶杩戝湪涓鏈功涓婅繖鏍疯铏氭柟娉曪細鈥滃綋璋冪敤铏氭柟娉曟椂锛岃繍琛屾椂灏嗗垽鏂皟鐢ㄨ櫄鏂规硶鐨勬槸浠涔堢被鐨勫疄渚嬶紝鐒跺悗璋冪敤閫傚綋鐨勮鐩栨柟娉曪紝鍙兘閫犳垚鎬ц兘鐨勮交寰笅闄嶁濄傝繖绉嶈娉曟纭悧锛
>
> 鍙﹀锛屽湪娲剧敓绫讳腑澹版槑涓涓笌鍩虹被涓柟娉曠鍚嶇浉鍚岀殑鏂规硶鏃讹紝涓嶆槸鍙互浣跨敤new鍏抽敭瀛楅殣钘忓熀绫讳腑鐨勬柟娉曞悧锛熼偅涔堜娇鐢ㄨ櫄鏂规硶鏈変粈涔堝ソ澶勶紵
>
>
> 杩樻湁涓涓叧浜庢娊璞℃柟娉曠殑绫讳技鐨勯棶棰橈細
>
> 鎴戣寰楀畾涔夊湪鎶借薄绫讳腑鐨勬娊璞℃柟娉曚笌鎺ュ彛寰堢浉浼煎晩锛屽畠浠兘涓嶅寘鎷柟娉曚綋銆侀兘蹇呴』鐢卞熀绫绘彁渚涘疄鐜般佸苟涓旈兘涓嶈兘鍦ㄦ淳鐢熺被涓慨鏀规柟娉曞0鏄庯紝瀹冧滑鏈変粈涔堝尯鍒紵
>
>
> 璋㈣阿鎮ㄧ殑鍥炵瓟锛侊紒锛
>
>
>