WEB开发网
开发学院软件开发C语言 Effective C# 原则29:仅在对基类进行强制更新时才... 阅读

Effective C# 原则29:仅在对基类进行强制更新时才使用new修饰符

 2009-02-19 08:16:15 来源:WEB开发网   
核心提示: 这是个难题,你的基类中隐藏了一个方法,Effective C# 原则29:仅在对基类进行强制更新时才使用new修饰符(3),而这又是在你的类的名字空间中,有两个方法解决这个问题,也应该小心的使用它,最重要的是,一个就是修改你的类中的方法名:public class MyWidget : B

这是个难题,你的基类中隐藏了一个方法,而这又是在你的类的名字空间中。有两个方法解决这个问题,一个就是修改你的类中的方法名:

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

或者使用new修饰符:

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

如果你可以拿到所有使用MyWidget类的源代码,那么你应该选择修改方法名,因为这对于今后的运行会更简单。然而,如果你已经向全世界的人发布了MyWidget类,这会迫使所有用户来完成这个众多的改变。这正是new修饰符容易解决的问题,你的用户不用修改DoWidgetThings()方法而继续使用它。没有人会调用到BaseWidget.DoWidgetThings()方法,因为(对于派生类而言)它们根本不存在。在更新一个基类时,如果发现它与先前申明的成员发生了冲突,可以用new修饰符来解决这个问题。

当然,在某些时候,你的用户可能想调用基类的Widget.DoWidgetThings()方法,这时你又回到了原来的问题上:两个方法看上去是一样的,但其实是不同的。考虑到new修饰长期存在的歧意问题,有时候,还是在短期上麻烦一下,修改方法名为上策。(译注:长痛不如短痛。呵呵)

new修饰符必须小心谨慎的使用。如果它是有歧意的,你就在类上创建了个模糊的方法。这只有在特殊情况下才使用,那就是升级基类时与你的类产生冲突时。即使在这种情况下,也应该小心的使用它。最重要的是,其它任何时候都不要用它。

上一页  1 2 3 

Tags:Effective 原则 进行

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接