メンバー変数ではなく、パラメーターを明示的に参照するにはどうすればよいですか?
static recursive{
public static List<string> output = new List<string>();
public static void Recursive(List<string> output){
...
}
}
メンバー変数ではなく、パラメーターを明示的に参照するにはどうすればよいですか?
static recursive{
public static List<string> output = new List<string>();
public static void Recursive(List<string> output){
...
}
}
修飾されていない参照は、よりローカルなスコープにあるため、常にパラメーターを参照します。
this
メンバー変数を参照する場合は、クラスの名前(または、非静的メンバー変数の場合)で修飾する必要があります。
output = foo; // refers to the parameter
recursive.output = foo; // refers to a static member variable
this.output = foo; // refers to a non-static member variable
しかし、とにかく名前を変更する必要があります。これにより、コードがはるかに読みやすくなります。
また、パブリック静的変数はまったく使用しないでください。.NETコーディングスタイルのガイドラインはすべて、パブリックフィールドを公開するのではなく、プロパティを強く推奨しています。そして、それらは常にキャメルケースに入れられているので、この問題はそれ自体で解決します。
public class MyClass {
public int number = 15;
public void DoSomething(int number) {
Console.WriteLine(this.number); // prints value of "MyClass.number"
Console.WriteLine(number); // prints value of "number" parameter
}
}
編集::
静的フィールドの場合、「this」の代わりにクラスの名前が必要です。
public class MyClass {
public static int number = 15;
public void DoSomething(int number) {
Console.WriteLine(this.number); // prints value of "MyClass.number"
Console.WriteLine(MyClass.number); // prints value of "number" parameter
}
}
public static void Recursive(List<string> output){
...
}
参照するブロック内のコードoutput
は常にローカルであり、メンバー変数ではありません。
メンバー変数を参照する場合は、を使用できますrecursive.output
。
Recursive
静的メソッド内にいるときはoutput
、メソッドの引数を指します。静的フィールドをポイントする場合は、静的クラスの名前をプレフィックスとして使用します。recursive.output
メンバー変数に別の名前を付けます。慣例では、パブリック静的メンバーでキャメルケースを使用します。
public static List<string> Output = new List<string>();
public static void Recursive( List<string> output )
{
Output = output;
}
静的メンバーを示すために明示的に参照することもできますがrecursive.output
、パラメーターまたはメンバーの名前を変更する方がクリーンです。
パラメータを明示的に参照する方法がわかりません。これが通常処理される方法は、パラメーターにまったく同じ名前が付けられないように、メンバー変数に_
またはなどの特別なプレフィックスを付けることです。m_
もう1つの方法は、this.varを使用してメンバー変数を参照することです。