Самый простой способ сделать класс наследовать конструкторы (C #) - PullRequest
7 голосов
/ 06 июня 2009

Да, извините, что задал глупый вопрос n00b. Итак, у меня есть программа на C #. У меня есть класс

class foo
{

    public int bar, wee, someotherint, someyetanotherint;

    public foo()
    {
         this.bar = 1:
         this.wee = 12;
         this.someotherint = 1231;
         this.someyetanotherint = 443;
    }
}

И я хочу создать класс под названием селезенка, который наследуется от foo

class spleen : foo
{

}

Какой самый быстрый и простой синтаксис для того, чтобы класс spleen наследовал конструктор от foo без необходимости копировать / вставлять весь конструктор из foo? Я не хочу слышать, что у меня уже слишком много параметров. Я уже знаю, что. (править: На самом деле нет. Я идиот) Я знаю, что мне, вероятно, следует как-то вызвать родительский конструктор, но я не знаю как. Как мне это сделать.

Редактировать: Теперь я понимаю, что мне нужно было больше времени, чтобы написать свой вопрос. Похоже, я пытался задать два вопроса одновременно, не осознавая этого (как наследовать конструкторы без параметров и как наследовать конструкторы с параметрами), и каким-то образом перемешал все это. Однако предоставленные ответы были очень полезны и решили мою проблему. Спасибо, и извините за то, что вы такой идиот!

Ответы [ 4 ]

19 голосов
/ 06 июня 2009

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

Попробуйте следующее. Я выбрал 0 по умолчанию из-за отсутствия лучшего варианта

class spleen : foo { 
  public spleen() : base(0,0,0,0)
  {
  }
}

РЕДАКТИРОВАТЬ

Исходя из вашей новой версии кода, самый простой способ вызвать конструктор - это буквально ничего не делать. Конструктор по умолчанию, сгенерированный для spleen, автоматически вызовет базовый пустой конструктор foo.

class spleen : foo { 
  public spleen() {}
}
7 голосов
/ 06 июня 2009

Вы просто создаете его и вызываете базовый конструктор:

public spleen(int bar, int wee, int someotherint, int someyetanotherint)
    : base(bar,wee,someotherint,someyetanotherint)
{
    // Do any spleen specific stuff here
}
5 голосов
/ 06 июня 2009

JaredPar прав, но что-то пропустил, и мне не хватает представителя для его редактирования.

class spleen : foo 
{
     public spleen() : base()
}

Если ваш родительский класс принимает параметр в конструкторе, то это будет

class foo
{

     public int bar, wee, someotherint, someyetanotherint;

     public foo(int bar, int wee, int someotherint, int someyetanotherint)
     {
           this.bar = bar;
           this.wee = wee;
           this.someotherint = someotherint;
           this.someyetanotherint = someyetanotherint;

     }
}

class spleen : foo 
{
     public spleen(int bar, 
                   int wee, 
                   int someotherint, 
                   int someyetanotherint) : base(bar, 
                                                 wee, 
                                                 someotherint,  
                                                 someyetanotherint)
}
0 голосов
/ 06 июня 2009

Сделать конструктор защищенным:

protected Operator(String s, int i, boolean flag){
    operator = s;
    precedenceLevel = i;
    associative = flag;
}

// материал

class MulOperator extends Operator {
protected MulOperator(String s, int precedenceLevel, boolean flag) {
    super(s, precedenceLevel, flag);
}

и т. Д. И т. П.

РЕДАКТИРОВАТЬ: при условии, что они имеют одинаковый / похожий конструктор ...

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