大家好,
我只是想知道何时何地使用关键字必须?因为有时如果我不“这个”甚至我删除“这个”程序运行正常。那么如果你不使用它会发生什么?或者如果你在错误的地方使用它。
一些明确的例子会受到批评。
答案 0 :(得分:3)
this
关键字通常用于消除成员变量和局部变量之间的歧义:
...
{
int variable = 10;
this.variable = 1; // modifies a member variable.
variable = 1; // modifies the local variable.
}
....
this
的另一个用途是传递对当前对象的引用,所以:
....
DoSomethingWithAnObject( this );
....
另一种用法(感谢HadleyHope)是将方法参数分配给具有相同名称的成员变量时消除歧义:
void Initialise( int variable )
{
this.variable = variable;
}
答案 1 :(得分:1)
调用静态成员时不能使用它。编译器不会让你。当您使用“this”时,您将显式调用当前实例。我喜欢用“this”为当前实例成员添加前缀,即使这不是强制性的,只是为了清楚起见。这样我就将局部范围变量与成员区分开来。
干杯
答案 2 :(得分:1)
public class People{
private String name;
private int age;
public People(String name, int age){
this.name = name;
this.age = age; //use this to declare that the age is the field in People class
}
}
使用此方法的一种方法,希望它可以帮助您。
答案 3 :(得分:1)
Microsoft建议将camelCase用于成员变量,即
public class MyClass
{
private int myInt;
private void SetMyInt(int myInt)
{
this.myInt = myInt;
}
}
因此,如果您没有'this'关键字,私有成员和参数之间就会出现混淆。
就个人而言,我更喜欢在私人成员前加上下划线以避免这种混淆。
private int _myInt;
所以我找到的唯一真正用途是将当前对象的引用传递给其他东西
MyStaticClass.MyStaticMethod(this);
答案 4 :(得分:0)
您不必每次在成员方法中使用“this”关键字,在这种情况下它很有用:
class human
{
private int age;
...
void func(int age)
{
this.age = age;
}
...
}
它可以解决你所说年龄的混乱
答案 5 :(得分:0)
当你在同一个范围内有一个成员变量和一个同名的局部变量时,你可以使用它 - 然后“this”将清楚你的意思。
考虑一下:
class Person
{
private string name;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public Person(string name)
{
this.name = name; // "this" is necessary here to disambiguate between the name passed in and the name field.
this.Name = name; // "this" is not necessary, as there is only one Name in scope.
Name = name; // See - works without "this".
}
}
答案 6 :(得分:0)
每当我访问成员变量或方法时,我个人都会使用这个。 99%的时间没有必要,但我认为它提高了清晰度并使代码更具可读性 - 一个质量非常值得输入4个字符和一个点的额外工作。
答案 7 :(得分:0)
这有点主观,但如果您使用正确的命名约定(我使用_camelCase
作为成员变量),您将永远不需要使用this
。
除了这个例外:=)
如果要从扩展方法所针对的类中调用扩展方法:
public class HomeController : Controller
{
public ActionResult Index()
{
// won't work
return MyCustomResult();
}
public ActionResult List()
{
// will work
return this.MyCustomResult();
}
}
public static class MyExtensions
{
public static MyResult MyCustomResult(this Controller instance)
{
return new SomeResult(instance.ActionName);
}
}