如何在C#中初始化派生类?

时间:2009-06-25 19:06:31

标签: 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 \ My Documents \ projectos \ Licenciatura \ Prototipo \ Agrinfo \ AgrinfoLib \ Interfaces \ SMS \ Processors \ RegistarAnuncio.cs 11 16 AgrinfoLib

我搜索了C#引用,但我没有找到一个代码示例,人们用参数初始化基类方法,任何人都可以给我一个帮助。

此致

5 个答案:

答案 0 :(得分:19)

您希望使用此语法来调用基础构造函数:

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

我有一个article on constructors,详细介绍。非常简短:

  • 您可以使用base(arguments)this(arguments) - 第一个版本调用基类构造函数,第二个版本调用同一个类中的另一个构造函数
  • 如果您没有指定任何内容,就像拥有base()
  • 一样
  • 你不能让构造函数调用循环(即一个构造函数调用另一个调用第一个的构造函数)
  • 您只能链接到一个构造函数(但可以链接到另一个构造函数)
  • 构造函数调用在执行构造函数体之前发生,但之后发生任何实例变量初始化程序

this”的一个常见用法是使用默认值。例如:

const string DefaultFirstValue = "fred";
const int DefaultSecondValue = 20;

public Foo(string firstValue, int secondValue)
{
    this.firstValue = firstValue;
    this.secondValue = secondValue;
}

public Foo(string firstValue) : this(firstValue, DefaultSecondValue)
{
}

public Foo(int secondValue) : this(DefaultFirstValue, secondValue)
{
}

public Foo() : this(DefaultFirstValue, DefaultSecondValue)
{
}

使用C#4,由于会有可选参数和命名参数,因此不太有用。当然,您可能仍希望为不支持这些功能的语言提供重载。

答案 1 :(得分:15)

你需要这样做:

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

答案 2 :(得分:3)

您需要调用基类的现有构造函数

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

答案 3 :(得分:2)

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

答案 4 :(得分:2)

您必须从派生类中调用基类的构造函数。该错误是抱怨的,因为您在yoru基类中没有默认的无参数构造函数。试试这个:

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