明确引用参数

时间:2011-06-15 14:52:46

标签: c# .net variables naming-conventions url-parameters

如何显式引用参数而不是成员变量?

static recursive{

    public static List<string> output = new List<string>();

    public static void Recursive(List<string> output){
        ...
    }
}

7 个答案:

答案 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。

引用成员变量