2010-05-28 63 views

回答

10

我的意见:使用this作为消歧的目的,例如,当参数名称与类属性相冲突时,否则将它放在较小的噪音范围内。

+0

当你修改代码时(你通常会这样做),你将不得不更新所有现在变成ambiguos或者不再有模糊的地方。现实告诉我们,你很可能不会这样做,让你的代码处于不稳定的状态 - 可读性明智。 – bitbonk 2010-05-28 13:58:26

5

为了可读性和易理解性,每当调用实例成员时,都应该使用this.。它被认为是最好的实践和StyleCop suggests it too

(有了这个前缀)类的所有调用 成员(是)立即识别, 这无论编辑被 用来查看代码。另一个优点是它创建了一个快速, 实例成员和静态成员 之间的可识别区分,它们不加前缀。

使用'this。' 前缀的最后一个优点是键入此。会导致 Visual Studio显示IntelliSense 弹出式窗口,使 开发人员可以快速轻松地选择类别 成员进行调用。

换句话说,如果你省略了这个。前缀你不能很快理解,因此soemthing是一个静态成员,一个局部变量,一个代表... 随着前缀,你会看到它的第一次。

但最重要的是:无论您选择什么,您都应该在整个文件中以及所有其他文件中保持一致,并且也可以在整个团队中保持一致!

+5

我完全不同意,认为使用多余,这个关键字只增加了噪音。 – spender 2010-05-28 13:28:12

+3

这取决于什么更可读,也许'这。'对你来说'更具可读性*,但是*我*觉得它很混乱,并且会降低我对代码的解析速度。你的回答使得这看起来绝对是绝对的,事实并非如此,也许每个程序员或每个团队都是如此。 – 2010-05-28 13:28:15

+2

(根据我自己的回答)我同意这一个。在代码可读性方面,一致的冗长度比偶尔的低劣得多。 – Oli 2010-05-28 13:33:31

0

有效,如果你在使用相同名称的范围有一个以上的项目(例如一个实例变量和一个同名的局部变量)

在你所描述的情况下使用的 this关键字作为消歧最有用
0

一个方式,你真正需要的是,当传递一个命名为成员参数

在构造

MYCLASS(INT ID){ this.id = ID; }

1

当引用一个变量时,this.可以区分局部变量或参数和成员变量。但是当提到一种方法时,它并没有提供任何有用的区别,因此,对我的思考方式,codejunk。丢开。

+0

它将实例方法与静态方法(和委托)区分开来,当您的代码库同时包含这两个方法时,这非常有用。 – 2010-05-28 13:49:18

+0

感谢您的更正,@Jeff;我不知道在C#中可以有同名的静态和实例方法;我会认为这是一个糟糕的做法 - 但我是一个爪哇人。我会更新答案。 – 2010-05-28 14:34:48

+0

对不起,我不清楚!我并不是说你可以在C#中使用相同名称的静态和实例方法(你不能),只需知道*在调用站点*是否有价值*你所调用的是静态还是实例成员(或委托人)。 – 2010-05-28 14:37:47

2

到目前为止,您已经得到了两个不同意见的答案,所以我会将我的观点作为前Java,前C#以及现在最主要的Python程序员加入。在Python中,我们有self,几乎完成相同的工作,只是它不是可选的。

我会说尽可能经常使用this。它不会改变任何东西,因为当你从一个对象中调用它时它是隐含的,但它确实有助于区分,所以你知道你正在调用一个类成员(相对于全局函数)。

当你在一年的时间里阅读代码时,你会感激你的。

0

我通常不会离开'这个'。在代码中。但是,当我不记得这是什么时,我确实将它用于智能感知目的。包含的内容。然后我删除它。

但是你必须保留它的一个例子是限定类似名称隐藏的成员。例如:

public Employee(string name, string alias) 
{ 
    this.name = name; 
    this.alias = alias; 
} 
1

如果调用不是模糊不清的,您不需要它,但我更喜欢使用它。在我看来,Bar仅仅通过foo.Property和foo.Method()来访问Foo的属性和方法,并且以this.Property和this.Method()访问它自己的成员。你仍然在处理对象的属性和方法,除了在this的情况下,你正在处理同一类中的成员。但为什么这件事在编码风格上呢?我们一直使用this。它很干净,很清楚,并且一致。

0

有几个人提到了使用this关于成员变量。我建议......

或者:

  • 前缀的成员变量与this.

或者:

  • 采用的成员变量的命名惯例,需要你他们的名字带有_leadingUnderscore

Stylecop规则可以设置为执行您的团队喜欢的这些规则中的任何一个。

0

这指向当前对象,它基本上用于移除的用于例如

方法/变量名的模糊性

public class Test 
{ 
private string name; 
public Test(string name) 
{ 
this.name = name;//using this coz the parameter name and variable names are same 
} 
} 

你不需要总是使用它。

我希望它能帮助你。