为什么有些人用“这个”
本文关键字:这个 为什么 | 更新日期: 2023-09-27 17:58:19
可能重复:
';的目的是什么;这';关键字。
你好,
我有个问题。我四处看了看,但似乎不明白。
为什么有些程序员在某些东西前面使用this
?类似:
this.button1 = String.Empty;
在MSDN中,我从来没有见过使用this.
,除非this.
指的是表单本身,比如:
this.WindowState = FormWindowState.Minimized;
这就是我们真的应该引用的东西吗?或者,这样做有没有额外的好处?到目前为止,我还没有体验到任何明显的好处,也没有注意到任何变化。
谢谢:-)
关键字this
通常用于明确变量的来源。例如,一个大函数可能有许多变量,使用这些变量可以判断正在设置的类的哪些是真正的属性,哪些是函数变量。
此外,请考虑下面的示例,其中需要使用关键字来区分类变量和函数参数。
object one;
object two;
public MyClass(object one, object two)
{
this.one = one;
this.two = two;
}
实际上,您使用this
来引用容器对象。使用this
有时在解决以下合并情况时很有用:
public class Person
{
private String name;
public Person(String name)
{
this.name = name;
}
}
但是,您可以通过更改私有字段/变量的名称来避免使用此选项:
public class Person
{
private String _name;
public Person(String name)
{
_name = name;
}
}
这意味着这个对象:如果你在一个窗体中,那就是窗体,如果你在简单的类中,那是你的类。我们不应该使用它(它是隐含的),但有时你需要它来使代码非常清晰,或者在以下情况下是必要的:
class MyClass
{
private int tot = 0;
public MyClass(int tot)
{
this.tot = tot;
}
}
请查看http://msdn.microsoft.com/en-us/library/dk1507sz(v=vs.71).aspx。大多数情况下,我们使用它来确保我们引用的是可能被隐藏的类的成员。MSDN的例子是:
public Employee(string name, string alias)
{
this.name = name;
this.alias = alias;
}
在代码中使用this
关键字将区分哪些区域是当前作用域中类的属性和方法。这也意味着我们使用的是实例方法和属性,而不是静态方法和属性。
这也意味着我们必须首先实例化它。
因此,它将提高代码的可读性和意义,尤其是在一个大型软件开发团队中,代码将共享给其他人。
当在比您的对象更局部的范围中存在另一个button1
时,类似this.button1
的东西是必要的。
this.
表示法被windows表单生成器系统地使用,这可能是您看到它的地方。
例如,当成员变量名称与方法参数相同时,this.
用于消除歧义。
除此之外,这是一个品味问题,但我相信大多数程序员不会使用它,因为它打字很长(但我想说,可读性更强一点)。
请记住,使用"this."有时是强制性的。例如,当分配与构造函数参数同名的字段值时,例如
public class MyClass{
private string name;
public MyClass(string name) {
this.name = name; // <== This is mandatory
}
}
对于编译器来说,它是相同的。Form将控件作为字段,添加this
关键字只需向读者提示我们正在使用Form字段
这是不必要的(没有它代码会很好地工作),但它确实使方法或字段的归属更加清晰。如果您在最挑剔的设置中使用StyleCop,Microsoft建议您使用此样式。
编辑:事实上,大多数时候这是不必要的,但正如其他几个答案所提到的,这有时对于解决冲突是必要的。
SomeNameSpace.SomeClass.SomeMethod()
SomeNameSpace.SomeClass.OtherMethod()
当你在SomeMethod()
内时,说你想打OtherMethod()
。使用this
可以避免每次使用时都必须写入SomeNameSpace.SomeClass.OtherMethod()
。
由于您已经在SomeClass
中,当您在SomeMethod()
中工作时,this
将引用SomeClass
。因此,引用OtherMethod()
所要做的就是转到:this.OtherMethod()
如果您需要将SomeNameSpace
或SomeClass
更改为其他名称,这是一个很好的快捷方式,也将使您的程序在未来更容易维护。。this
仍将按照您的预期工作。
namespace Foo {
public class Bar {
public void Method() {
// Do Other Stuff
}
public void OtherMethod() {
// Do Some Stuff
this.Method(); // Do Other Stuff
// Instead of Foo.Bar.Method()
}
}
}
这不是强制性的,但我相信遵循这种做法的主要原因是为了提高可读性。例如,它使读者很容易区分局部变量和方法参数。
public class User
{
string firstname;
string lastname;
public User(string firstname, string lastname)
{
this.firstname = firstname;
this.lastname = lastname;
}
}