0

以下は親&子クラスです。私は&はそれらを使用しようとする保護されたとして、親クラスのプロパティを作成する場合は継承チェーンを理解しようとしています

public class ParentController : ApiController 
{ 
    public ICustomer customer { get; set;} 
    public ICustUtil util { get; set;} 

} 


public class ChildController : ParentController 
{ 
    //no issue here 
    public string Get() 
    { 
     customer = util.GetCustomers(); 
    } 

} 

は、私はそれがpublicからprotectedアクセス指定子を更新違いを生むん方法を理解しようとしていますObject NULL reference Exception

public class ParentController : ApiController 
{ 
    protected ICustomer customer { get; set;} 
    protected ICustUtil util { get; set;} 

} 


public class ChildController : ParentController 
{ 
    //Object Null reference exception at run time here 
    public string Get(){ 
    customer = util.GetCustomers();} 

} 

を取得します。

ご注意: - 私は

今の命名規則を無視してくださいCastle Windsor DIコンテナを使用しています

+0

@ Kgn-web:いいえ、そのコードは実際にはコンパイルされません。 'public class ParentController:ApiController'のようなものが必要です。次に、あなたの 'ChildController'コードは、クラス宣言に直接宣言されていないので、どちらもコンパイルされません。 [mcve]を入力してください。 (また、.NETの命名規則について学ぶことを強くお勧めします。) –

+0

@JonSkeet、私の誤植。私は誠実に謝罪します –

+0

あなたの例外は、あなたのコンパイラエラーには関係しません。たぶんあなたの 'ChildController'クラス内であなたの' utils'プロパティを決してインスタンス化しないことでしょう。 – HimBromBeere

答えて

2

私はあなたがAutoFacのようなIoCコンテナを介してこれらのクラスのインスタンスをインスタンス化していて、セッター注入を使用していると推測しています。それ以外の場合は、utilを初期化していないので、最初の例がどのように動作するかはわかりません。

メンバーが保護されている場合、IoCコンテナは初期化できません。パブリックメンバーのみが、クラス自体の外部のコードからアクセスできます。

+0

はい。あなたは正しいと推測しました。私はキャッスルウィンザーDIコンテナを使用しています(FYI - 私は私の郵便で言及しました) –

+0

これを投稿して誠にありがとうございます。私はこれを知らなかった。 :) –

関連する問題