如何显式引用参数而不是成员变量?
static recursive{
public static List<string> output = new List<string>();
public static void Recursive(List<string> output){
...
}
}
答案 0 :(得分:2)
非限定引用将始终引用该参数,因为它位于更局部的范围内。
如果要引用成员变量,则需要使用类的名称(或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编码样式指南强烈建议使用属性,而不是公开公共字段。而且由于这些问题总是以骆驼为主,所以这个问题就解决了。
答案 1 :(得分:0)
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
}
}
答案 2 :(得分:0)
public static void Recursive(List<string> output){
...
}
引用output
的块中的代码将始终为本地&amp;不是成员变量。
如果您想引用成员变量,可以使用recursive.output
。
答案 3 :(得分:0)
当你进入Recursive
静态方法output
时,将指向方法的参数。如果要指向静态字段,请使用静态类的名称作为前缀:recursive.output
答案 4 :(得分:0)
为您的成员变量添加其他名称。 惯例是在公共静态成员上使用Camelcasing。
public static List<string> Output = new List<string>();
public static void Recursive( List<string> output )
{
Output = output;
}
答案 5 :(得分:0)
您可以显式引用recursive.output
来指示静态成员,但重命名参数或成员会更清晰。
答案 6 :(得分:0)
我知道无法明确引用参数。通常处理此方法的方法是为成员变量提供一个特殊的前缀,例如_
或m_
,这样参数的名称就永远不会完全相同。另一种方法是使用this.var。