2009-06-18 10 views

答えて

33

ベースコールは常にあります最初に完了しましたが、を静的メソッドと呼びます。たとえば:あなたは

new Constructor("Hello "); 

を呼び出す場合

public Constructor(string x) : base(Foo(x)) 
{ 
    // stuff 
} 

private static string Foo(string y) 
{ 
    return y + "Foo!"; 
} 

はさて基本コンストラクタは、 "!こんにちはフー" と呼ばれます。

は、まだ準備ができていないため、インスタンスのインスタンスインスタンスを呼び出すことはできません。

+0

私は長いコンストラクタにテキストの文字列を渡したいので、これにはあなたのアプローチを使いますか?つまり、テキストの長い文字列を返すstatic Fooメソッドを呼び出し、それを使って基本コンストラクタを呼び出します。 – raklos

+0

あなたは確かにそうすることができます - あなたは実際にその場合にパラメータを取るためにあなたのコンストラクタを必要としますか?どのような場合でも同じ文字列を基本コンストラクタに渡すつもりですか? –

+0

その場合、私のコンストラクタは必要ありません。基本クラスから派生するすべての新しいクラスに対して、それはベースコンストラクタによって必要とされる異なる "長い文字列"を持つでしょう – raklos

4

いいえ、私たちがコンストラクタ本体を実行する前に実行することがbaseコール:

//pseudocode (invalid C#): 
public Constructor(string x) { 
    base(x); 
    x = "blah"; 
} 
1

いいえ、基本コンストラクタは、常に現在のコンストラクタの前に呼び出されます。

0

いいえ、派生クラスのコンストラクタに渡された値で呼び出されます。基本クラスコンストラクタは、派生クラスコンストラクタの本体を実行する前に(明示的または暗黙的に)常に呼び出されます。

0

いいえ、そうではありません。ベースのコンストラクタには、の前にx の文字列が渡され、DerivedClassコンストラクタが実行されます。これは仕事があります。

public DerivedClass(string x) : base("Blah") 
{ } 

を私はそれについてはよく分からないが、あなたは基本コンストラクタを呼び出すときにそのように、任意の方法/ゲッターを呼び出すことができる必要があります:

public DerivedClass(DateTime x) : base(DateTime.Now) 
{ } 
+3

* * *メソッド - 静的なものだけです。 –

+0

'DateTime.Now'はプロパティなので、括弧を削除する必要がありますが、そうすることは可能です。 –

+0

@Jon:...または他のオブジェクトのインスタンスメソッド。 –

関連する問題