2009-06-25 3 views
1

У меня есть базовый класс:Как инициализировать производный класс в C#?

public class Processor 
{ 
    ParsedString _parsedMessage; 
    Utilizador _utilizador; 

    public Processor(ParsedString parsedMessage, Utilizador utilizador) 
    { 
     _parsedMessage = parsedMessage; 
     _utilizador = utilizador; 

    } 

    public virtual String Execute() 
    { 
     string result = null; 
     return result; 
    } 

} 

затем производного класса

public class RegistarAnuncio:Processor 
{ 
    public RegistarAnuncio(ParsedString parsedMessage, Utilizador utilizador) 
    { 
    } 
} 

и компилятор дает ошибку говоря:

Ошибка 9 Нет перегрузки для метода «Процессор» принимает " 0 'C: \ Documents and Settings \ user \ Мои документы \ projectos \ Licenciatura \ Prototipo \ Agrinfo \ AgrinfoLib \ Интерфейсы \ SMS \ Процессоры \ RegistarAnuncio.cs 11 16 AgrinfoLib

Я googled для ссылки на C#, но я не нашел пример кода, в котором люди инициализируют метод базового класса аргументами, может ли кто-нибудь мне помочь.

С уважением,

ответ

15

Вам нужно сделать:

public RegistarAnuncio(ParsedString parsedMessage, Utilizador utilizador) 
    : base(parsedMessage, utilizador) 
{ 
} 
19

Вы хотите использовать этот синтаксис для вызова базового конструктора:

public class RegistarAnuncio : Processor 
{ 
    public RegistarAnuncio(ParsedString parsedMessage, Utilizador utilizador) 
     : base (parsedMessage, utilizador) 
    { 
    } 
} 

У меня есть article on constructors, который переходит в более подробно , Очень кратко:

  • Вы можете использовать base(arguments) или this(arguments) - первая версия вызывает конструктор базового класса, то второй вызывает другой конструктор в том же классе
  • Если вы ничего не указали, это как с base()
  • Вы не можете сделать конструктор вызывает круговой (то есть один конструктор, призывающего другой, который вызывает первый)
  • Вы можете только цепь одного конструктора (но это может одной цепи в другую)
  • вызов конструктора происходит I mmediately до тела конструктора выполняется, но после любой переменной экземпляра Инициализаторы

Один из вариантов использования «this» является использование значения по умолчанию. Например:

С C# 4 это будет менее полезно, поскольку будут указаны дополнительные параметры и именованные аргументы. Конечно, вы все же можете обеспечить перегрузки для языков, которые не поддерживают эти функции.

2
public class RegistarAnuncio:Processor 
{ 
    public RegistarAnuncio(ParsedString parsedMessage, Utilizador utilizador) 
     : base(parsedMessage, utilizador) 
    { 
    } 
} 
3

Вы должны вызвать существующий конструктор базового класса

public class RegistarAnuncio:Processor 
{ 
    public RegistarAnuncio(ParsedString parsedMessage, Utilizador utilizador) 
     : base(parsedMessage, utilizador) 
    { 
    } 
} 
2

Вы должны назвать constrcutor базового класса из вашего производного класса. Ошибка возникает из-за того, что у вас нет конструктора без параметров по умолчанию в базовом классе yoru. Попробуйте следующее:

public class RegistarAnuncio:Processor 
{  
    public RegistarAnuncio(ParsedString parsedMessage, Utilizador utilizador) 
     : base(parsedMessage, utilizador) 
    { 
    } 
} 
Смежные вопросы