2011-07-29 15 views
0

私はコンストラクタでは、そのクラスのプロパティにアクセスする必要がCSharpコードに取り組んでいます。論理的には、私はまだ建設中ではないオブジェクトのプロパティにアクセスするので、私にとって面倒に見えます。私たちはコンストラクタからプロパティにアクセスすることができます

これは古いコードで、C#バージョン4.0を使用しています。リファクタリングのようなものですから、すべてを最初から再設計することはできません。

おかげ

class employee 
{ 
    employee() 
    { 
    int square = count * count; 
    } 
    private int count {get;set;} 
} 

答えて

0

構築時に、あなたは、プロパティを設定するかもしれないが、それはなっバッキング静的メンバを持っているか、値型でない限り、あなたがそれを設定するまで、あなたはnull値を取得します。

public class WhatClass 
{ 
    public WhatClass() 
    { 
     int theCount = Count; // This will set theCount to 0 because int is a value type 
     AProperty = new SomeOtherClass; // This is fine because the setter is totally usable 
     SomeOtherClass thisProperty = AProperty; // This is completely acceptable because you just gave AProperty a value; 
     thisProperty = AnotherProperty; // Sets thisProperty to null because you didn't first set the "AnotherProperty" to have a value 
    } 

    public int Count { get; set; } 
    public SomeOtherClass AProperty { get; set; } 
    public SomeOtherClass AnotherProperty { get; set; } 
} 
+1

間違っています。あなたは 'NullReferenceException'を取得しません。あなたはちょうど 'null'を取得します。 – SLaks

+0

@SLaks:ああ、そう、ありがとう。 –

3

countは常に0になることを除いて、それと間違って何も、ありません。

.NETでは、コンストラクタ内の状態をすべて設定していないオブジェクトを除き、(部分的に)オブジェクトが存在しません。

1

クラスを作成していて、以前にコンストラクタでプロパティが設定されておらず、静的でない場合は値がデフォルトまたはnullになるため、含む。それ以外の場合、コンストラクタはプロパティを何かに設定するのに最適な場所です。

0

はい、これは可能ですが、publicプロパティでラップされたプライベートフィールドを持ち、クラスメソッドでフィールドのみを使用する方がよい場合もあります。あなたのケースで私はプライベートプロパティを削除し、代わりにクラスフィールド変数を使用することをお勧めします。あなたのクラスの消費者がプロパティにアクセスする可能性がある場合、プライベートセッターでパブリックにすることができます。この種のオートマチックプロパティは、プロパティによってラップされたprivatrフィールドの代替手段です。

関連する問題