当讨论事件处理程序时,关键字this在c#中是什么意思?

本文关键字:是什么 意思 this 关键字 事件处理 程序 | 更新日期: 2023-09-27 18:05:07

当我为csharp编写事件处理程序时,它看起来像这样:

public void FooHandler(object sender, EventArgs e)
{
    //do stuff..
    this.doSomething();  //Does the "this" keyword mean something in this context?
}

"this"关键字在这个上下文中有什么意思吗?

编辑:

假设我也有这样的代码:

public class GizmoManager {
    public void Manage() {
        g = new Gizmo();
        g.Foo += new EventHandler(FooHandler);
    }
}

this(在FooHandler中)指的是什么?

当讨论事件处理程序时,关键字this在c#中是什么意思?

是的,这是对FooHandler()被调用的对象的引用。委托能够引用静态和非静态方法。当谈到非静态时,this是对对象实例的引用。

class A
{
   public delegate void MyDelegate(object sender, int x);
   public event MyDelegate TheEvent;
   public void func()
   {
     if(TheEvent != null) TheEvent(this, 123);
   }
}
class B
{
   public B()
   {
     A a = new A();
     a.TheEvent += handler;
     a.func();
   }
   public void handler(object sender, int x)
   {
      // "sender" is a reference to object of type A that we've created in ctor
      // "x" is 123
      // "this" is a reference to B (b below)
   } 
}
B b = new B(); // here it starts

更多细节。代码:

g = new Gizmo();
g.Foo += new EventHandler(FooHandler);

可以这样重写

g = new Gizmo();
g.Foo += new EventHandler(this.FooHandler); // look here

在这种情况下,this与你在处理程序中的this是相同的;-)

更重要的是,如果你在理解this方面有一些问题:

class X
{
  int a;
  public X(int b)
  {
    this.a = b; // this stands for "this object"
    // a = b is absolutely the same
  }
  public X getItsThis()
  {
    return this;
  }
}
X x = new X();
X x2 = x.getItsThis();
// x and x2 refer to THE SAME object
// there's still only one object of class X, but 2 references: x and x2

更完整…

public class Bar
{
  public Bar()
  {
    Gizmo g = new Gizmo();
    g.Foo += new EventHandler(FooHandler);
  }
  public void FooHandler(object sender, EventArgs e)
  {
    //do stuff..
    this  //Does the "this" keyword mean something in this context?
  }
}

"this"将指向Bar

的实例

this将指向您所在的当前类,而不是方法。

从MSDN

this关键字引用类的当前实例。静态成员函数没有this指针。这个关键字可以是用于从构造函数、实例方法和访问器实例。

在您的示例中,this.doSomething()引用了该方法之外的某个任意类中的方法。this是多余的。

在以下情况下使用this是很有用的:

public Employee(string name, string alias) 
{
   this.name = name;
   this.alias = alias;
}

它有助于描述意思之间的关系。否则,没有this,你真正指的是namealias吗?

最后,sender将指向引发事件的object