我看了this answer及其评论,我很好奇:有没有理由不使用this
/ Self
/ Me
?
顺便说一句:如果之前有人问过,我很抱歉,似乎无法在SO上搜索this
这个词。
答案 0 :(得分:9)
警告:下面纯粹是主观的答案。
我认为不使用此/ self / me的最佳“原因”是简洁。如果它已经是成员变量/函数,那么为什么要冗余地添加前缀?
我个人避免使用this / self / me,除非有必要消除编译器的特定表达式的歧义。许多人不同意这一点,但我从来没有把它作为我工作过的任何团体中的一个真正的难点。
答案 1 :(得分:8)
我认为已经引用的两个帖子涵盖了大多数常见情景;主要是简洁性和冗余性与清晰度 - 一个微小的补充:在C#中,需要使用“this”来访问当前类型的“扩展方法” - 即
this.Foo();
其中Foo()
在外部声明为:
public static void Foo(this SomeType obj) {...}
答案 2 :(得分:5)
它在某些情况下澄清,例如c#中的这个例子:
public class SomeClass
{
private string stringvar = "";
public SomeClass(string stringvar)
{
this.stringvar = stringvar;
}
}
答案 3 :(得分:3)
如果你将StyleCop与所有规则一起使用,它会让你放入this.
。自从我开始使用它以来,我发现我的代码更具可读性,但这是个人偏好。
答案 4 :(得分:2)
我认为这不是问题,因为它只会增加代码的可读性,这是一件好事。
对于某些语言,例如PHP,甚至必须以$ this->作为前缀;如果你需要使用类字段或方法。
我不喜欢这样一个事实:如果PHP有一些方法可以在没有它的情况下引用类成员,那么它会使某些行不必要地长一些。
答案 5 :(得分:2)
我个人认为this.whatever
的可读性较差。你可能没有注意到2行方法的差异,但要等到你在课堂上到处都有this.variable
和this.othervariable
。
此外,我认为this.
的使用被认为是对被憎恨的匈牙利符号的一部分的替代。有些人发现,读者看到变量是一个类成员仍然更清楚,而this.
就可以了。但是,如果我们需要额外的清晰度,为什么要欺骗自己而不是使用普通的"m_"
或简单"_"
呢?这是5个字符对2(甚至1)。打字少,结果相同。
话虽如此,风格的选择仍然是个人喜好的问题。很难说服某人曾经以某种方式阅读代码,这对改变代码很有用。
答案 6 :(得分:2)
嗯,eclipse以不同的颜色进行颜色字段,参数和局部变量,因此至少在eclipse环境中工作,不需要在语法上区分字段,以便将它们特别标记为自己和后代的“字段”。
答案 7 :(得分:1)
之前有人问过,在“java中的变量”上下文中:
Do you prefix your instance variable with ‘this’ in java ?
主要的经常性原因似乎是:
“它会增加您需要筛选的视觉噪音以找到代码的含义。”
可读性,换句话说......我不买,我发现this.
非常有用。
答案 8 :(得分:1)
这对我来说听起来像是胡说八道。使用'this'可以使代码更好,我可以看到它没有问题。像这样的政策是愚蠢的(至少当你甚至没有告诉人们为什么会这样做时)。
答案 9 :(得分:1)
'这个'。在代码中总是向我建议编码器使用intellisense(或其他IDE等价物)来完成他们的繁重工作。
我当然对此感到内疚,但是出于纯粹的虚荣理由,我确实将其删除了。
我使用它们的唯一原因是限定模糊变量(不良做法)或构建扩展方法
限定变量
string name; //should use something like _name or m_name
public void SetName(string name)
{
this.name = name;
}
答案 10 :(得分:0)
至于我,我使用this
来调用实例化对象的方法,而self
用于静态方法
答案 11 :(得分:0)
最终,这始终是个人选择的问题。就个人而言,我使用这种编码惯例:
public class Foo
{
public string Bar
{
get
{
return this.bar;
}
/*set
{
this.bar = value;
}*/
}
private readonly string bar;
public Foo(string bar)
{
this.bar = bar;
}
}
所以对我而言,“这个”实际上是保持构造函数可读的必要条件。
编辑:当我编写上面的代码时,“sinje”发布了完全相同的示例。
答案 12 :(得分:0)
在VB.NET中,我使用的常见做法之一是以下代码:
Class Test
Private IntVar AS Integer
Public Function New(intVar As Integer)
Me.Intvar = intvar
End Function
End Class
不是所有的时间,但主要是Me / this / self非常有用。澄清你正在谈论的范围。
答案 13 :(得分:0)
在典型的setter方法中(取自lagerdalek的答案):
string name;
public void SetName(string name)
{
this.name = name;
}
如果你没有使用它,编译器就不会知道你指的是成员变量。
this.
的使用是告诉编译器您需要访问成员变量 - 这超出了方法的直接范围。在与成员变量同名的方法中创建变量是完全合法的,就像覆盖扩展另一个类的类中的方法一样是完全合法的。
但是,如果您仍然需要使用超类的方法,则使用 super.
在我看来使用它。并不比使用超级更差。并允许程序员在代码中更灵活。
就我而言,可读性甚至没有进入,它都是关于变量的可访问性。
答案 14 :(得分:0)
我不仅经常使用“这个”。我有时会使用“那个”。
class Foo
{
private string bar;
public int Compare(Foo that)
{
if(this.bar == that.bar)
{
...
等等。我的代码中的“那个”通常意味着同一个类的另一个实例。