当讨论事件处理程序时,关键字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
中)指的是什么?
是的,这是对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
将指向您所在的当前类,而不是方法。
this关键字引用类的当前实例。静态成员函数没有this指针。这个关键字可以是用于从构造函数、实例方法和访问器实例。
在您的示例中,this.doSomething()
引用了该方法之外的某个任意类中的方法。this
是多余的。
在以下情况下使用this
是很有用的:
public Employee(string name, string alias)
{
this.name = name;
this.alias = alias;
}
它有助于描述意思之间的关系。否则,没有this
,你真正指的是name
或alias
吗?
最后,sender
将指向引发事件的object
。