2016-10-18 5 views
-1

次のコード行の1では、コンパイラにエラーが表示されます: "未使用のフィールド 'IntField'割り当てられていないローカル変数 'structObj' "。なぜ違うのですか?未割り当ての構造体オブジェクトのフィールドとプロパティの異なるエラーを表示するコンパイラ

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

     StructA structObj; 

     Console.WriteLine(structObj.IntField); //Line :1 
     Console.WriteLine(structObj.IntProperty); //Line :2    

     Console.ReadKey(); 
    } 
} 


struct StructA 
{ 
    public int IntField; 
    public int IntProperty { get; set; } 
} 
+0

オブジェクトを初期化する必要があります。StructA structObj = new StructA();なぜエラーが出るのか、私は誰かがそれより良いことを説明すると確信しています – Innat3

答えて

0

StructAは構造体であり、IntFieldはフィールドです。

使用する前にStructA structObj = new StructA()を試してください。

私はエラーの違いの理由は、プロパティがメソッドに変換されるということだと思います。初期化していないオブジェクトでメソッドを呼び出すことはできません。

+1

あなたの答えを読んだ後、私は別の疑問がある、つまりプロパティがメソッドに変換されているのでしょうか?だから私はそれをgoogledとmsdnは私の疑いをクリアしています。それは、 "プロパティは実際にアクセサと呼ばれる特別なメソッドです"。コンパイラが2つの異なるエラーを表示する理由は正解です。ありがとうございました。 – Garvit

0

New演算子を使用しない場合、フィールドは未割り当てのままであり、すべてのフィールドが初期化されるまでオブジェクトを使用できないため、構造体のnew()を呼び出す必要があります。

ので、プロパティの値を使う初期ことが

StructA structObj = new StructA(); 

あなたは構造で唯一の変数のための新しいを使用せずに試すことができなければなりませんが、初期化はこれだけ

structObj.IntField= 1; 

しかし、のような値を割り当てる必要ですあなたはnew()を必要とするプロパティのために。

関連する問題