Явная ссылка на параметр - PullRequest
0 голосов
/ 15 июня 2011

Как явно указать параметр, а не переменную-член?

static recursive{

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

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

Ответы [ 7 ]

2 голосов
/ 15 июня 2011

Неквалифицированная ссылка будет всегда ссылаться на параметр, потому что он находится в более локальной области.

Если вы хотите сослаться на переменную-член, вам нужно указать ее имя класса (или 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 настоятельно рекомендуется вместо предоставления открытых полей properties . И поскольку они всегда в верблюжьей клетке, эта проблема решается сама собой.

0 голосов
/ 15 июня 2011

Я не знаю способа явно ссылаться на параметр.Обычно это делается для того, чтобы присвоить переменным-членам специальный префикс, например _ или m_, чтобы параметры никогда не имели одно и то же имя.Другой способ - ссылаться на переменные-члены, используя this.var.

0 голосов
/ 15 июня 2011

Вы можете явно сослаться на recursive.output, чтобы указать статический элемент, но было бы лучше переименовать либо параметр, либо элемент.

0 голосов
/ 15 июня 2011

Дайте вашей переменной-члену другое имя. Соглашение заключается в использовании Camelcasing на общедоступных статических элементах.

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

public static void Recursive( List<string> output )
{
   Output = output;
}
0 голосов
/ 15 июня 2011

Когда вы находитесь внутри Recursive статического метода, output будет указывать на аргумент метода. Если вы хотите указать на статическое поле, используйте имя статического класса в качестве префикса: recursive.output

0 голосов
/ 15 июня 2011
public static void Recursive(List<string> output){
        ...
    }

Код в блоке, который ссылается на output, всегда будет локальным, а не переменной-членом.

Если вы хотите сослаться на переменную-член, вы можете использовать recursive.output.

0 голосов
/ 15 июня 2011
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
    }
}
...