当我为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
内)指的是什么?
答案 0 :(得分:2)
是的,它是对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
答案 1 :(得分:2)
更完整...
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的实例
答案 2 :(得分:1)
this
将引用您当前所在的类,而不是方法。
来自MSDN,
this关键字引用类的当前实例。静态的 成员函数没有this指针。这个关键字可以是 用于从构造函数,实例方法和内部访问成员 实例访问器。
在您的示例中,this.doSomething()
引用该方法之外的某个任意类中的方法。 this
是多余的。
在以下情况下使用this
非常有用:
public Employee(string name, string alias)
{
this.name = name;
this.alias = alias;
}
它有助于界定意义。否则,没有this
您真正指的是name
或alias
?
最后,sender
将引用引发此事件的object
。