有人可以在C#中解释“this”的含义吗?
如:
// complex.cs
using System;
public struct Complex
{
public int real;
public int imaginary;
public Complex(int real, int imaginary)
{
this.real = real;
this.imaginary = imaginary;
}
答案 0 :(得分:15)
this
关键字是对该类当前实例的引用。
在您的示例中,this
用于引用类Complex
的当前实例,它消除了构造函数签名中int real
与{{1}之间的歧义在类定义中。
MSDN has some documentation这个也值得一试。
虽然与您的问题没有直接关系,但public int real;
还有另外一种用作扩展方法的第一个参数。它用作表示要使用的实例的第一个参数。如果想要向this
添加方法,则可以在任何静态类中轻松编写
String class
答案 1 :(得分:2)
答案 2 :(得分:1)
this
引用该类的实例。
答案 3 :(得分:1)
Nate和d_r_w有答案。我只想在你的代码中特别添加它。在契约中引用CLASS的成员以区别于对FUNCTION的论证。那么,行
this.real = real
表示将函数的值(在本例中为构造函数)参数'real'赋值给类成员'real'。一般来说,你也会使用案例来区分:
public struct Complex
{
public int Real;
public int Imaginary;
public Complex(int real, int imaginary)
{
this.Real = real;
this.Imaginary = imaginary;
}
}
答案 4 :(得分:1)
当方法体时
public Complex(int real, int imaginary) {
this.real = real;
this.imaginary = imaginary;
}
正在执行,它正在结构Complex
的特定实例上执行。您可以使用关键字this
来引用代码正在执行的实例。因此,你可以想到方法的主体
public Complex(int real, int imaginary) {
this.real = real;
this.imaginary = imaginary;
}
正在阅读
public Complex(int real, int imaginary) {
assign the parameter real to the field real for this instance
assign the parameter imaginary to the field imaginary for this instance
}
始终存在隐式this
,以便以下是等效的
class Foo {
int foo;
public Foo() {
foo = 17;
}
}
class Foo {
int foo;
public Foo() {
this.foo = 17;
}
}
但是,本地人优先于成员,所以
class Foo {
int foo;
public Foo(int foo) {
foo = 17;
}
}
指定17
,以便变量foo
作为方法的参数。如果要在具有同名本地的方法时分配给实例成员,则必须使用this
来引用它。
答案 5 :(得分:1)
由于大多数答案都提到“类的当前实例”,因此对于新手来说,“实例”一词可能很难理解。 “类的当前实例”表示this.varible是在定义它的类中专门使用的,而不是其他任何地方。因此,如果变量名也出现在类之外,则开发人员无需担心多次使用同一变量名会带来的冲突/困惑。
答案 6 :(得分:0)
这是一个表示类的当前实例的变量。例如
class SampleClass {
public SampleClass(someclass obj) {
obj.sample = this;
}
}
在这个例子中,这用于将someclass obj上的“sample”属性设置为SampleClass的当前实例。
答案 7 :(得分:0)
引用类
的当前实例