C#中“this”的含义是什么

时间:2011-06-07 19:47:41

标签: c#

有人可以在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;
   }

8 个答案:

答案 0 :(得分:15)

this关键字是对该类当前实例的引用。

在您的示例中,this用于引用类Complex的当前实例,它消除了构造函数签名中int real与{{1}之间的歧义在类定义中。

MSDN has some documentation这个也值得一试。

虽然与您的问题没有直接关系,但public int real;还有另外一种用作扩展方法的第一个参数。它用作表示要使用的实例的第一个参数。如果想要向this添加方法,则可以在任何静态类中轻松编写

String class

另请参阅:http://msdn.microsoft.com/en-us/library/bb383977.aspx

答案 1 :(得分:2)

  

this关键字指的是当前关键字   类的实例也被使用   作为第一个参数的修饰符   扩展方法。

enter image description here

this (C# reference) - MSDN
C# Keywords - MSDN

答案 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)

引用类

的当前实例