C#为继承类集编码 - 使用关键字'base.methodname和this.methodname'是一个好习惯吗?

问题描述:

我一直在C#中工作了很长一段时间,但现在和同事一起回答了这个常见问题。C#为继承类集编码 - 使用关键字'base.methodname和this.methodname'是一个好习惯吗?

问题是:在一个继承的类集 - 调用方法时,我们应该使用关键字'base.methodname和this.methodname'...不管它是否是重写的方法?

我的回答是:是的 - 它是一个很好的实践 - 使用它,因为这就是为什么创建它们的原因。

详细解释:此外,代码可能会在逻辑上发生变化,也许某些IF-ELSE类似的条件可能会在以后出现。所以在那个时候,开发人员必须被迫重新访问每一行代码,并确保他/她能够正确选择被调用的方法--- base.methodname()或this.methodname()ELSE。 NET框架将调用DEFAULT(我认为它的base.methodname())和整个逻辑可以去折腾。

其他C#程序员如何看待它?

是否使用“this”。是一个意见问题。有些人喜欢它,因为很明显,你正在调用一些课程级别,其他人则觉得这是多余的噪音。

至于基地 - 在我看来你应该只明确地说“基地”。如果你想显式调用基本方法,而不是当前类中的重写方法。通常你唯一应该看到的地方就是被重写的方法本身。

不要仅仅因为它是基类中的实现将被调用。这是而不是的意思是说“我知道实际的执行是在基类”,它的意思是说“具体地说不要调用这个类的实现,调用基类一”。以任何其他方式使用它部分地失败了继承点。

如果您确定始终使用基类中的方法,则可以使用base.MyMethod。 但是请注意:

想象一下,您在基类中有一个名为“GetPrice”的方法,并且开始在您的继承类(PromoClass)中使用base.GetPrice。 3个月后,有人要求改变Promotions(PromoClass)中计算价格的方式,您(或新开发人员)将覆盖或新增该方法并对其进行测试......等等,不起作用:|。因为你总是调用基类中的方法。所以它仍然会调用基地的方法,您需要更改班级中的所有呼叫。

这是一个当然的例子。如果这是贵公司的标准,那么每个人都应该知道他应该在整个班级改变该方法的调用,如果不是的话,要小心。

我更喜欢用“base”。使用基本方法,但我通常忽略“this”。

+0

什么?为什么要投票? – 2012-02-23 09:48:54

我觉得它听起来像坏的类设计,如果你以任何方式可能会怀疑你是否调用类或基类中的方法。

我很难找到任何可以明确调用重写的基类方法的合理示例,期望从传统类或第三方类派生。

我个人几乎从不使用虚拟方法。你几乎总是可以用界面和抽象方法做出更好的设计。

当使用基本调用时,这是因为您想要扩展基本方法的功能,因此您可以在覆盖方法中调用基本方法。在我看来,任何其他用法都是错误的。另外,在覆盖虚拟方法和调用基础之前,您应该考虑是否可以以其他方式实现扩展。例如,如果您的基本方法称为抽象方法或您可以在派生类中实现或注入的接口方法。

我曾经使用虚拟方法的次数是在通用基类中留下“空白”方法的时候。空白方法(如线程封装中的InitializeThread())允许我可选地扩展基类,但是我绝不会在基方法中编写代码,也不会调用基类。

调用基础是错的!

我同意@Holstebroe和@布鲁诺科斯塔。当你每次明确地调用base.Method时,都会切断多态的潜力,这是首先使用继承的基本原因之一。