2012-07-02 26 views
6

のMicrosoft .NETドキュメントは言う:ServiceBaseから派生するときにベースコンストラクタをコールしますか? <a href="http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase.servicebase">System.ServiceProcess.ServiceBase</a>クラスのコンストラクタのための

あなたは、基本クラスのコンストラクタをオーバーライドする場合は、明示的にあなたの派生クラスのコンストラクタで それを呼び出す必要があります。

マイクロソフトC#プログラミングガイドで Using Constructors

、それは言う:派生クラスで

、基底クラスのコンストラクタが基本キーワードを使用して明示的に と呼ばれていない場合、デフォルトコンストラクタ、 がある場合は、暗黙的に呼び出されます。

したがって、ベースコンストラクタを明示的に呼び出す必要がありますか?その理由は何ですか?

答えて

5

問題ではありません。これらは、同じILにコンパイルします。

public class Service1 : ServiceBase 
{ 
    public Service1() : base() { } 
} 
public class Service1 : ServiceBase 
{ 
    public Service1() { } 
} 

ServiceBaseが明示的に呼び出すことをお勧めしますなぜ私は知りません。私は他の提案と一緒に行くつもりです、それはより理にかなっているようです。

+0

ドキュメントの_が "基底クラスのコンストラクタをオーバーライドする" _意味がありますか?私が知る限り、インスタンスコンストラクタは実際には仮想ではなく、継承されません。もちろん、ベースクラスにアクセス可能なインスタンスコンストラクタが1つしかない場合は、間違って行うことはできません(基本コンストラクタを「連鎖」する必要があるため)。 C#以外の.NET言語では、ドキュメントのセンテンスが意味をなさないでしょうか?それとも純粋なナンセンスですか? –

+1

私が知る限り、それはナンセンスです。 –

関連する問題