我有一个基类:
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#引用,但我没有找到一个代码示例,人们用参数初始化基类方法,任何人都可以给我一个帮助。
此致
答案 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)
{
}
}