首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Effective C# 原則 29:僅在基類強制更新時才使用 new 修飾符(二)

     編輯:關於C語言

基類新增同名方法衝突的解決

你完成 MyWidget,使用者可用。但 BaseWidget 公司發布新版本,添加了他們自己的 DoWidgetThings 方法:

public class BaseWidget { public void DoWidgetThings() { /* details */ } }

難題:基類中隱藏一個方法,且在你類別名稱空間中。兩種解決:修改你類別方法名:

public class MyWidget : BaseWidget { public void DoMyWidgetThings() { /* details */ } }

或用 new 修飾符:

public class MyWidget : BaseWidget { public new void DoWidgetThings() { /* details */ } }

若能拿到所有使用 MyWidget 原始碼,應選擇修改方法名,對未來執行更簡單。但若已向全世界發布 MyWidget,會迫使所有使用者完成眾多改變。這正是 new 修飾符容易解決的問題:使用者無需修改 DoWidgetThings() 繼續使用。沒人會調用 BaseWidget.DoWidgetThings(),因對衍生類別而言它們根本不存在。更新基類時發現與先前宣告成員衝突,可用 new 修飾符解決。

長期歧義問題

某些時候使用者想調用基類 Widget.DoWidgetThings(),又回到原問題:兩方法看起來一樣但實際不同。考慮 new 修飾符長期存在的歧義問題,有時短期麻煩一下,修改方法名為上策。(譯註:長痛不如短痛。呵呵)

謹慎使用 new 修飾符

new 修飾符必須小心謹慎使用。若有歧義,你在類別上建立模糊方法。只有特殊情況下才用:升級基類時與你類別產生衝突。即使這種情況也應小心使用。最重要的是,其他任何時候都不用它。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved