0

ゲッターとセッターを使用した変数の C# 自動宣言と Java 宣言の違いを理解しようとしています。

Javaでは、通常これを行います:

private int test;

public int getTest() {
    return test;
}

public void setTest(int test) {
    this.test = test;
}

しかし、C#では次のようなことを試しました:

private int test { public get; public set};

しかし、それは変数へのアクセスをまったく許可しませんでした。だから私はこれで終わった:

public int test { get; set; }

このようにして、クラスの外部から変数 test にアクセスできました。

私の質問は、これら2つの違いは何ですか? また、変数を公開する C# の実装は悪い考えですか?

C# では、変数を "public" として宣言しました。Javaでは「プライベート」として宣言されています。これは何か影響がありますか?

ここで(以下のものに加えて)本当に良い答えを見つけました

4

3 に答える 3

3

まったく同じです。

C# で定義した自動プロパティは、とにかくゲッター メソッドとセッター メソッドにコンパイルされます。これらは「シンタックス シュガー」に分類されます。

これ:

public int Test { get; set; }

..これにコンパイルされます:

private int <>k____BackingFieldWithRandomName;

public int get_Test() {
    return <>k____BackingFieldWithRandomName;
}

public void set_Test(int value) {
    <>k____BackingFieldWithRandomName = value;
}
于 2013-06-25T09:04:22.793 に答える
1

最初の例では、バッキング フィールドがあります。

あなたC#ができること:

private int test { get; set; };

またはproperty公開する(完全に有効)

public int test { get; set; };

でバッキング フィールドを使用することもできます。これらは、プロパティが言語に導入されるC#前はより一般的でした。

例えば:

private int _number = 0; 

public int test 
{ 
    get { return _number; }
    set { _number = value; }
}

上記の例では、にアクセスするtestpublicです。Propertyprivate field

于 2013-06-25T09:05:41.257 に答える
0

これは、getter および setter メソッドを簡単に作成するために C# コンパイラによって提供されるソリューションです。

private int test;

public int Test{
   public get{
      return this.test;
   }
   public set{
      this.test = value;
   }
}
于 2013-06-25T09:06:43.427 に答える