Есть ли способ манипулировать переменными, передаваемыми в конструктор дочернего класса, перед передачей его в базовый класс? - PullRequest
3 голосов
/ 20 апреля 2010

Есть ли способ отложить вызов конструктора суперкласса, чтобы вы могли сначала манипулировать переменными?

Например.

public class ParentClass
{
   private int someVar;

   public ParentClass(int someVar)
   {
       this.someVar = someVar;
   }
}

public class ChildClass : ParentClass
{
    public ChildClass(int someVar) : base(someVar)
    {
        someVar = someVar + 1
    }
}

Я хочу иметь возможность отправить новое значение для someVar (someVar + 1) в конструктор базового класса, а не в значение, переданное конструктору ChildClass. Есть ли способ сделать это?

Спасибо,
Matt

Ответы [ 2 ]

4 голосов
/ 20 апреля 2010
public class ChildClass : ParentClass
{
    public ChildClass(int someVar) : base(someVar + 1)
    {
    }
}

Теперь, если эта манипуляция сложнее, чем увеличение целого числа и заслуживает отдельного метода, вы можете вызвать этот метод внутри base, но этот метод должен быть static .

0 голосов
/ 20 апреля 2010

Как насчет чего-то подобного? Вы можете иметь различные реализации ISomething и передать требуемый базовый класс.

public interface ISomething
{
    int DoSomething(int someVar);
}

public class Something : ISomething
{
    private int someVar;

    public Something(int someVar)
    {
        this.someVar = someVar;
    }

    public int DoSomething(int someVar)
    {
        return someVar + 1;
    }
}

public class ParentClass
{
   private int someVar;

   public ParentClass(ISomething something)
   {
       this.someVar = something.DoSomething(someVar);
   }
}

public class ChildClass : ParentClass
{
    public ChildClass(int someVar) : base(new Something(someVar))
    {

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