是否有任何原因,不要使用"本"("我""我",...)?
-
22-07-2019 - |
题
我读 这个答案 和其评论和我很好奇:是否有任何原因不能使用 this
/ Self
/ Me
?
顺便说一句:我很抱歉,如果这已经问过,它似乎是不可能的搜索词 this
在如此。
解决方案
警告:下面纯粹是主观的答案
我认为最好的“理由”不使用本/自/我是简洁。如果它已经是一个成员变量/函数,那么为什么冗余加上前缀?
我个人避免使用这个/自/我,除非有必要消除歧义用于编译器的特定表达。很多人不同意这一点,但我还没有过这是我工作过的任何一组真正的症结所在。
其他提示
我想大多数的常见的场景已覆盖这两个职位已经引用;主要为了简洁和冗余VS清晰度 - 轻微增加:在C#,它需要使用“这”,以便访问一个“扩展方法”为当前类型 - 即
。this.Foo();
其中Foo()
外部声明为:
public static void Foo(this SomeType obj) {...}
它阐明在某些情况下,像这样的实例在C#:
public class SomeClass
{
private string stringvar = "";
public SomeClass(string stringvar)
{
this.stringvar = stringvar;
}
}
如果您使用了StyleCop上所有的规则,它让你把this.
。自从我开始使用它,我发现我的代码更易读,但是这是个人喜好。
我觉得这是一个非问题,因为它只是增加了更多可读性这是一件好事代码。
对于某些语言,如PHP,甚至用强制的这 - $>如果你需要使用类的字段或方法的前缀。
我不喜欢,它使得一些不必要的线路长度超过他们可能是,如果PHP有一些方式来引用类成员没有它的事实。
我个人发现this.whatever
较少可读。你可能不会注意到在2线方法的差异,但等到你this.variable
和类this.othervariable
随处可见。
此外,我认为使用this.
被发现作为多讨厌匈牙利命名法的一部分的替换。有些人在那里发现了,它仍然是清晰的读者看到一个变量是类成员,并this.
的伎俩。但是,为什么欺骗自己,而不是使用普通的旧"m_"
或者干脆"_"
的,如果我们需要额外的清晰度?它的5个字符与2(或甚至1)。少打字,相同的结果。
说了这么多,款式的选择仍然是个人喜好的问题。很难说服应用于即有用改变它以一定的方式来读取代码某人。
很好,Eclipse一样,色域,参数和不同颜色的局部变量,因此至少在Eclipse环境中工作也没有必要对语法区分场以专门它们标记为“域”为你自己和子孙后代。
据之前确实要求,在“可变在Java”上下文:
主要复发原因似乎是:
“它增加需要进行筛选,以寻找代码的意思的视觉噪声。”
可读性,换句话说......我不买,我发现this.
非常有用的。
这听起来像废话给我。使用“这个”可以使代码更好,我可以看到它没有问题。这样的政策是愚蠢的(至少当你甚至不告诉人们为什么他们在的地方)。
'这个'。在代码总是建议,我认为编码器已经使用智能感知(或其他IDE当量)做他们的繁重。
我当然犯了这一点,但是我做的,纯粹是出于虚荣的原因,后来将其删除。
我使用它们的唯一的其它原因是有资格的不明确的变量(不好的做法),或者建立一个扩展方法
排位的可变
string name; //should use something like _name or m_name
public void SetName(string name)
{
this.name = name;
}
作为用于我我使用this
调用一个实例化的对象的方法,而self
为静态方法
在VB.NET常见的做法我使用的一种是以下代码:
Class Test
Private IntVar AS Integer
Public Function New(intVar As Integer)
Me.Intvar = intvar
End Function
End Class
不是所有的时间,但大多ME /这个/自我是相当有用的。澄清,和你谈话的范围。
在一个典型的设置方法(从lagerdalek的回答采取):
string name;
public void SetName(string name)
{
this.name = name;
}
如果你不使用它,编译器将不知道你指的成员变量。点击
使用的 this.
是告诉你需要访问成员变量的编译器 - 这是该方法的直接范围。创建这是相同的名称作为成员变量是完全合法的,就像覆盖在一个类中的方法已推广另一个类是完全合法的方法中的一个变量。结果
但是,如果你仍然需要使用超类的方法,您使用 super.
在我看来用这个。没有比使用超差。并允许在他们的代码编程更多的灵活性。结果
就我而言可读性甚至不接触到它,它是所有关于你的变量的可访问性。
在结束它总是个人选择的问题。就个人而言,我使用此编码约定:
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”,而我在写上面的代码
不仅我经常使用的“本”。我有时用 “那个”。
class Foo
{
private string bar;
public int Compare(Foo that)
{
if(this.bar == that.bar)
{
...
等。 “那”在我的代码通常意味着同一类的其他实例。