显式引用一个参数

Posted

技术标签:

【中文标题】显式引用一个参数【英文标题】:Explicitly refer to a parameter 【发布时间】:2011-09-15 15:01:48 【问题描述】:

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

static recursive

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

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

【问题讨论】:

我认为这在递归函数范围内会模棱两可。更改参数名称 仅仅因为你可以做某事并不意味着你应该 - 使用不同的变量名,否则这会很混乱。 我同意这是模棱两可的,但这只是一个例子来说明我在寻找什么。 【参考方案1】:

非限定引用将始终引用参数,因为它位于更局部的范围内。

如果你想引用成员变量,你需要用类名来限定它(或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 而不是公开公共字段。而且由于这些总是驼峰式的,所以这个问题自己解决了。

【讨论】:

在这种情况下这是不可能的,因为它是静态的。【参考方案2】:
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
    

【讨论】:

topicstarter 在静态上下文中,所以静态是不可能的。 @Frederik Gheysels:你错了。有办法 - 看看我的编辑部分。【参考方案3】:
public static void Recursive(List<string> output)
        ...
    

块中引用output 的代码将始终是本地的,而不是成员变量。

如果你想引用成员变量,你可以使用recursive.output

【讨论】:

【参考方案4】:

当你在Recursive静态方法里面时output会指向方法的参数。如果要指向静态字段,请使用静态类的名称作为前缀:recursive.output

【讨论】:

【参考方案5】:

给你的成员变量另一个名字。 惯例是对公共静态成员使用 Camelcasing。

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

public static void Recursive( List<string> output )

   Output = output;

【讨论】:

那不是camelCasing,那是PascalCasing。【参考方案6】:

您可以显式引用recursive.output 来指示静态成员,但重命名参数或成员会更简洁。

【讨论】:

【参考方案7】:

我不知道如何显式引用参数。通常处理这种情况的方式是给成员变量一个特殊的前缀,例如_m_,这样参数就不会具有完全相同的名称。另一种方法是使用 this.var 引用成员变量。

【讨论】:

以上是关于显式引用一个参数的主要内容,如果未能解决你的问题,请参考以下文章

PHP是不是优化数组类型的函数参数,而不是通过引用显式传递,当它们没有被修改时?

没有括号和显式所有者对象引用的单参数方法调用[重复]

ref的使用

ref和out实际用法

如何显式引用字符串值(Python DB API/Psycopg2)

有没有办法在函数调用中通过引用传递和通过值显式传递?