Вызов переопределенного базового метода условно в C # - PullRequest
7 голосов
/ 27 октября 2009

Я никогда не задумывался над этим вопросом: но было бы ужасным преступлением вызывать base.SomeMethod () условно в переопределенном методе?

Пример как в:

protected override void SomeMethod()
{ 
     if( condition > 0 ) 
        base.SuperMethod(); 
}

Я знаю, что это может считаться плохой практикой, но на самом деле я никогда не читал такого утверждения до сих пор.

Ответы [ 5 ]

10 голосов
/ 27 октября 2009

Я не могу придумать причину, почему это было бы плохо с моей головы.

Было бы намного хуже переопределить базовый метод и скопировать функциональность базового метода для условного вызова вместо простого вызова базового метода.

7 голосов
/ 27 октября 2009
class HardHearingPerson : Person
{
  override void Listen() 
  { 
    if (volume.Acceptable()) 
      base.Listen(); 
  }
}

Думаю, это зависит от контекста, но я уверен, что это могло бы быть оправдано.

2 голосов
/ 27 октября 2009

Я делаю это довольно часто. Каждый раз, когда мне нужно «сделать что-то большее» в методе, я переопределяю его, делаю свое дело и вызываю базовый метод (или наоборот)

1 голос
/ 27 октября 2009

Классы должны быть предназначены для наследования :

Если базовый класс спроектирован таким образом, что вызов базовых версий определенных методов является необязательным, то можно пропустить эти вызовы.

Если базовый класс спроектирован таким образом, что базовые версии ДОЛЖНЫ быть вызваны, то не следует их опускать.

Обсуждение того, является ли это "хорошей практикой", по моему мнению, упускает из виду. Способ, которым класс структурирован для наследования, основан на его цели и дизайне. Решение о том, вы МОЖЕТ или ДОЛЖНО вызывать базовые версии метода, является частью классов public interface в отношении наследования .

Вы не можете решить, когда будет желательно или не желательно вызывать метод базового класса, когда вы переопределяете, не понимая, как разработан базовый класс и для какой цели служит каждый метод.

1 голос
/ 27 октября 2009

Я думаю, что это полностью приемлемо. Возможно, вы захотите переопределить поведение метода базового класса только при определенных обстоятельствах или расширить его, вызвав базовый метод, а затем сделав свое дело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...