1

静的プロパティの違いがわかりません:

public static int intId;

そして取得;設定; プロパティ:

public int intId
{
  get
  {
    return intId;
  }
  set
  {
    intId = value;
  }
}

これら2つの違いは何ですか?それらは同じように機能しますか、それとも異なりますか?

4

5 に答える 5

1

最初のものはプロパティではありません。畑です。これも静的なものです。

静的ではなくインスタンス変数であったとしても、この 2 つは異なり、異なる IL にコンパイルされます。

public フィールドで単純なプロパティを使用する理由については、プロパティを使用すると、背後にある実装をカプセル化できます。インターフェイスを変更せずに型の内部を変更できます。

于 2013-04-12T16:06:50.887 に答える
0

これらはクラスの同じ int 変数ですが、最初の変数は static int であるため、クラスからアクセスして変更することができ、そのインスタンスはすべて同じ値になります。

public static int intId;

2 つ目はインスタンスによってアクセスされるだけであり、静的ではないためインスタンスごとに一意の値ですが、公開されているため誰でもアクセスできます。

 public int intId
    {
        get
        {
            return intId;
        }
        set
        {
            intId = value;
        }
    }
于 2013-04-12T16:20:36.000 に答える
0

1 つ目は static フィールドです。それは財産でさえありません。

静的フィールドには、アプリケーションの値が 1 つだけあります。

2 つ目はインスタンス プロパティで、クラスのインスタンスごとに異なります。

この例では、プロパティまたはフィールドであれば大きな違いはありません。しかし長期的には、インターフェイスでプロパティを使用する場合、後でそれを変更して、たとえば検証を行ったり、オブジェクトを新しい値に何らかの形で反応させたりする実際のゲッターとセッターを持たせることができます。フィールドは単なるフィールドであり、いつ、どのように設定され、それに反応するかを制御することはできません。

于 2013-04-12T16:06:52.520 に答える
0

これら2つの違いは何ですか?

最初のコード例はフィールドで、2 番目のコード例はプロパティです。

フィールドは、値が呼び出される前にインスタンス化 (定義で設定されている場合class) に割り当てられるメンバーであり、設定または取得時に制御することはできません。classclassconstructor

public static int intId;

プロパティはclassメンバーです。データを設定して取得する方法を制御できる特別な「フィールド」として説明できます。つまり、カプセル化です。一種の関数ですが、フィールドのように動作します。

public int intId
    {
        get
        {
            return intId;
        }
        set
        {
            intId = value;
        }
    }

あなたの例では、intプロパティはstatic intフィールドを使用していますが、両方を間違って使用しています:

  1. フィールドにはprivate修飾子が必要であり、 ではありませんstatic。そうしないと、外部ソースから変更される可能性があるため、使用する意味がありません。

  2. どちらも同じ名前なので、変更してください。

そのように:

private int _intId;

public int IntId
{
    get
    {
        return _intId;
    }
    set
    {
        _intId = value;
    }
}
于 2013-04-12T16:08:12.060 に答える