2016-05-31 11 views
1

私はインタビュー中に次の質問を受け取りました。 "派生クラスオブジェクトから基本クラスコンストラクター(デフォルトコンストラクター)を単独で呼び出す方法は?"そのオブジェクトは派生クラスのデフォルトコンストラクタを呼び出すべきではありません。どのように可能ですか?C#で派生クラスオブジェクトを介して単独で基本クラスのコンストラクタを呼び出す方法は?

このコードされています。私はちょうど呼び出され、派生クラスから1せずに、基本クラスのコンストラクタを表示する

class a 
{ 
    public a() 
    { 
     MessageBox.Show("Base class called"); 
    }  
} 
class b : a 
{ 
    public b() 
    { 
     MessageBox.Show("Derived class"); 
    } 
} 

。どうすればこれを達成できますか?

+4

あなたはこれを自分で解決しようとしましたか? – ArtOfCode

+1

派生クラスのコンストラクタを作成しないでください...自動的に最初に基本クラスを呼び出します。 – DDave

+1

あなたは何を答えましたか?私たちのインタビューではありませんか? – HimBromBeere

答えて

1

質問の仕方は謎のように聞こえますが、「基本クラスのデフォルトのコンストラクタを派生クラスのデフォルト以外のコンストラクタからどう呼び出すか」ということになります。

これは、暗黙のうちに、とにかく起こるだろうが、あなたが明示的になりたい場合は、基本クラスで呼び出すためにどのコンストラクタ指定するbase keywordを探しています:

public Derived(object param) : base() 
{ 

} 

派生を呼び出さないための唯一の方法をクラスのデフォルトのコンストラクタは、派生クラスにデフォルト以外のコンストラクタを持ち、それを使ってオブジェクトをインスタンス化することです。

this fiddleデフォルトと非デフォルトコンストラクタの両方を含むデモについては、this fiddleを参照してください。

class Base 
{ 
    public Base() { } 
}  

class Derived : Base 
{ 
    public Derived() { } 
} 

由来する1つを作成するときにbase -class'-コンストラクタが自動的に呼び出されます。あなたは以下のクラスを持っていると仮定すると

+0

両方のクラスにはメッセージボックスが含まれています。 –

+0

@chinnathambirは関連性がありますか? –

+0

私もあまり知りませんが、面接官はこのように尋ねました。 –

0

。そのため、派生クラスを呼び出さずに基本クラスのコンストラクタを呼び出すことはまったく不可能です。 Derivedを作成した場合は、DerivedではなくBaseのインスタンスを作成する方法がありますが、そのコンストラクタは必ず呼び出されます。あなたが直接Base - オンを呼び出しDerived内の第二constrcutorを持っている場合

は、しかし、あなたはもちろん、あなたの派生クラスのdefaulöt-コンストラクタをバイパス可能性があります

class Derived : Base 
{ 
    public Derived() { } 
    public Derived(params object[] args) : base() { } 
} 

今、あなたは、次の呼び出しを行うことができます。

Derived d = new Derived(); // will call both default-constructors 
Derived d1 = new Derived(null); // calls the params-overloaded constructor and not its default one 
+0

に完全なコードがありません。必要な変更を加えて投稿しました。しかし、正しい – DDave

+0

@ DDave完全なコード?これは*完全ですが、スタンドアロンのコンソールアプリケーションではなく、アセンブリ(DLL)としての意味です。しかし、私は彼/彼女がそれを必要とするコードを含めるためにOPに任せています。「静的void Main」では必要ではありません。 – HimBromBeere

-1

は、このコードを試してみてください::

class Base 
{ 
    public Base() { 
     Console.WriteLine("BaseClass Const."); 
    } 
}  

class Derived : Base 
{ 
    public Derived() { } 
    public Derived(params object[] args) : base() { } 
} 

    public class Program 
    { 
     public static void Main(string[] args) 
     { 

      Derived d = new Derived(null) ; 

     } 
    } 

期待される出力:

BaseClass Const. 
+0

代わりに@HimBromBeereの答えを変更してみませんか?それがそうであるように、なぜ彼がすべてをやるのかを説明するので、彼の答えはより良いものになります。コードをコピーして実装例を追加しました。 –

+0

私は期待通りに適切な答えを出しました。むしろ正確な回答を投稿してください。私は彼のポストにコメントしました。 – DDave

関連する問題