私は次のことを理解していません: 以下のコードでは、コンストラクタの2番目のthis
キーワードを削除してコードを単純化できることをVisual Studioに教えてくれます。c#以下のコンストラクタの2つのキーワードの違いは何ですか?
しかし、最初にthis
というキーワードを削除できないのはなぜですか? 両方の変数がコンストラクタの外部でクラス内で宣言されていたため、両方の変数がインスタンスに対して "オーバーライド"されます。
this
のキーワードを両方とも削除すると、VSは最初の割り当てが同じ変数に行われたものの、2番目の割り当ては行われないと不平を言います。 私にとって唯一の明白な違いは、2番目の変数は配列ですが、どのように違いがあるのか分かりません。
*ここでは上書きが正しい用語ではないと思われます。コンストラクタ内、識別子celestialBodyCount
はそうあなたがthis
とそれを修飾する必要がフィールドにアクセスするには、パラメータを参照することを意味します -
public class CelestialObject {
CelestialBody[] celestialBodies;
int celestialBodyCount;
public CelestialObject(int celestialBodyCount = 2) {
this.celestialBodyCount = celestialBodyCount;
this.celestialBodies = new CelestialBody[celestialBodyCount];
}
}
クラスレベルとメソッド本体の両方に 'celestialBodyCount'があるためです。クラスレベルを参照するように 'this'を書いてください。 'this'を書いていなければ、まずメソッドの範囲を調べます。何も見つからなければ、クラスレベルで価値を探します。 –
より良い命名規則は、この '_celestialBodies'のように先頭にアンダースコアを持つフィールドを書くことです。これはresharperが示唆し、私はいつもそれを行うものです。大会では、このようなフィールドに名前を付けます。引数とローカル変数はアンダースコアなしで名前が付けられます。したがって、 'this'を書く必要はありません。 –
ありがとう、命名規則といくつかのスタイルポリシングthingieを調べます。 – Balinth