我们都知道this
指的是一个类的实际实例......但在我看来,大多数人并没有使用它。那么,我应该使用它吗?
我对它的看法如下:由于this
引用了类的实际实例,因此它应该用于访问该类的任何成员。
public void(String newValue) {
this.privateVariable = newValue;
}
这应该保证该值不会分配给范围内具有相同名称的对象(无论如何也可能最终为未定义的行为)。但是,如果使用下划线将私有字段与非私有字段分开,该怎么办:
public voud(String newValue) {
_privateVariable = newValue;
}
在这种情况下,{p> this
似乎有点多余和不必要。
那么,是否有充分的理由使用或不使用this
?或者我只是无所事事地绞尽脑汁?
答案 0 :(得分:7)
我个人只在必要时才使用它,例如
public MyClass(string name)
{
this.name = name;
}
我更喜欢从最自然的名称重命名参数或字段。我没有使用this
,但在其他地方没有必要。话虽如此,这样做绝对没有伤害 - 如果你觉得它让你的代码更清晰,那就是使用它的一个很好的理由。
答案 1 :(得分:7)
没有人提到你必须使用 this
如果要求是制作符合StyleCop的代码并且不违反可读性规则SA1101。根据文件,
只要代码包含对本地类的实例成员的调用或没有以“this”为前缀的基类,就会发生违反此规则的行为。
另外,在我看来,即使对于非StyleCop兼容的源代码,也必须鼓励使用this
关键字,因为指定this
会增加可读性并降低本地混合的风险(方法范围) )和类(对象范围)变量。
答案 2 :(得分:3)
您应该使用命名约定方法。 (带有非核心的那个。)
如果忘记“this”,使用“this”方法更改代码会有危险。
为什么呢?如果followin类中的MyMethod稍后被更改为包含一个名为“something”的局部变量,则编译器仍会编译,而代码不再符合预期。
class MyClass
{
int something = 10;
void MyMethod()
{
//...lots'a code here...
something = 20; //Which var is something pointing at?
}
}
将其更改为以下内容将引入错误...
class MyClass
{
int something = 10;
void MyMethod()
{
int something = 0;
//...lots'a code here...
something = 20; //Which var is something pointing at?
}
}
因此,除非所有开发人员都在为您的团队工作,共享代码,否则永远都会记住“这个”;不要这样!
答案 3 :(得分:2)
我个人确保我从未在类成员和本地声明的变量之间发生名称冲突。这意味着我从不使用它。然而,这完全取决于可读性。如果您认为“this”会使您的代码更直观易懂,那么请使用它,如果不是,则不要使用它。
答案 4 :(得分:2)
我喜欢使用this.
,因为它会带来intellisene,这意味着我经常可以输入方法的几个字母,变量和自动完成 - 这样可以更快地编写代码!
答案 5 :(得分:1)
我没有使用字段与本地人的特殊指标(它们都很难看)。我发现,如果越来越难以跟踪哪些是我更好的服务,通过分解方法缩短与较少的本地状态。 (一个例外是参数的自然名称与字段匹配 - 最常见于构造函数 - 然后使用this.
消除歧义。)
编辑:添加了一个例外(感谢其他答案提醒我)。
答案 6 :(得分:1)
我的两分钱:下划线很难看!
=>字段只是camelCase
=>与camelCase局部变量混淆是可能的
=>始终符合this
答案 7 :(得分:1)
我曾经一直使用this
- 可能是来自pythons显式self
参数的习惯。我想提醒我何时使用实例状态。
使用JetBrains的Resharper让我制造了这种习惯,因为它总是将this
标记为冗余。
答案 8 :(得分:0)
这是主观的,但除非提供明确性,否则我不愿意拥有它。
使用不必要的this
就像是在说“创建新人”。
您选择:)