2009-06-25 10 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¥My Documents¥projectos¥Licenciatura¥Prototipo¥Agrinfo¥AgrinfoLib¥Interfaces¥SMS¥Processors¥RegistarAnuncio.cs 11 16 AgrinfoLib

私は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()
  • を持っているようなものです
  • 同じクラス内の別のコンストラクタを呼び出します
  • あなたは(他になく、その1月のチェーン)1つのコンストラクタにのみチェーン
  • コンストラクタ呼び出しが私を発生することができます
  • コンストラクタは円形(最初に呼び出す別の呼び出しすなわち1つのコンストラクタ)を呼び出すことはできませんコンストラクタ本体が実行されますが、後任意のインスタンス変数の初期化子

さmmediately前に「this」のための一般的な用途の1つは、デフォルト値を使用することです。例:

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では、オプションのパラメータと名前付き引数があるため、これはあまり役に立ちません。もちろん、これらの機能をサポートしていない言語のオーバーロードを提供したい場合もあります。

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

あなたは、あなたの派生クラスから基底クラスのconstrcutorを呼び出す必要があり

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

基底クラスの既存のコンストラクタを呼び出す必要があります。 yoruベースクラスのデフォルトのパラメータレスコンストラクタがないため、エラーが発生します。試してみよう:

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