在C#中,当谈到事件处理程序时,this这个关键字意味着什么?
当我为csharp编写事件处理程序时,它如下所示:在C#中,当谈到事件处理程序时,this这个关键字意味着什么?,c#,events,event-handling,C#,Events,Event Handling,当我为csharp编写事件处理程序时,它如下所示: public void FooHandler(object sender, EventArgs e) { //do stuff.. this.doSomething(); //Does the "this" keyword mean something in this context? } public Employee(string name, string alias) { this.name = name;
public void FooHandler(object sender, EventArgs e)
{
//do stuff..
this.doSomething(); //Does the "this" keyword mean something in this context?
}
public Employee(string name, string alias)
{
this.name = name;
this.alias = alias;
}
“this”关键字在这个上下文中有什么意思吗
编辑:
假设我还有以下代码:
public class GizmoManager {
public void Manage() {
g = new Gizmo();
g.Foo += new EventHandler(FooHandler);
}
}
this
(在foodhandler
中)指的是什么?是的,它是对调用foodhandler()
的对象的引用。委托能够引用静态和非静态方法。当谈到非静态对象时,这是对对象实例的引用
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
在本例中,此
与处理程序中的此
相同;-)
更重要的是,如果您在理解此时遇到一些问题:
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
是的,它是对调用foodhandler()
的对象的引用。委托能够引用静态和非静态方法。当谈到非静态对象时,这是对对象实例的引用
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
在本例中,此
与处理程序中的此
相同;-)
更重要的是,如果您在理解此时遇到一些问题:
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
此
将引用您所在的当前类,而不是方法
从
this关键字引用类的当前实例。静止的
成员函数没有此指针的名称。该关键字可以是
用于从构造函数、实例方法和
实例访问器
在您的示例中,this.doSomething()
引用了该方法之外的任意类中的方法<代码>此
是冗余的
在以下情况下使用此
非常有用:
public void FooHandler(object sender, EventArgs e)
{
//do stuff..
this.doSomething(); //Does the "this" keyword mean something in this context?
}
public Employee(string name, string alias)
{
this.name = name;
this.alias = alias;
}
它有助于在意义之间进行划分。否则,如果没有此
您真正指的是什么名称
或别名
最后,sender
将引用引发事件的对象。此
将引用您所在的当前类,而不是方法
从
this关键字引用类的当前实例。静止的
成员函数没有此指针的名称。该关键字可以是
用于从构造函数、实例方法和
实例访问器
在您的示例中,this.doSomething()
引用了该方法之外的任意类中的方法<代码>此
是冗余的
在以下情况下使用此
非常有用:
public void FooHandler(object sender, EventArgs e)
{
//do stuff..
this.doSomething(); //Does the "this" keyword mean something in this context?
}
public Employee(string name, string alias)
{
this.name = name;
this.alias = alias;
}
它有助于在意义之间进行划分。否则,如果没有此
您真正指的是什么名称
或别名
最后,sender
将引用引发事件的对象。更完整
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实例
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的一个实例此
关键字在右边的行中不是唯一的?是的,此
将仅引用您的Gizmo
类中的g
sender
将引用调用EventHandler
的类。Leito,我目前有两个相互矛盾的答案。阅读@loki的回答,因为他比我更清楚,看看你是否仍然说同样的话。自相矛盾,因为我认为我们谈论的不是同一个这个。如果您一直编辑问题并每次更改代码,则有点难以理解,注释也会过时:)。在您的示例中,this
指的是拥有foodhandler
的类,该
关键字在右边的行中不是唯一的?是的,this
仅指您的Gizmo
类中的g
sender
将引用调用EventHandler
的类。Leito,我目前有两个相互矛盾的答案。阅读@loki的回答,因为他比我更清楚,看看你是否仍然说同样的话。自相矛盾,因为我认为我们谈论的不是同一个这个。如果您一直编辑问题并每次更改代码,则有点难以理解,注释也会过时:)。在您的示例中,this
引用拥有foodhandler
的类。这是有道理的。在这种情况下,sender
会是g
实例吗?是的,sender会引用“触发”事件的OJBEC,为了清楚起见,最有可能是gI实例建议,将顶部的类Foo
重命名为Bar
,以确保该类与Gizmo
中其他地方定义的Foo
事件无关。这是有道理的。在这种情况下,sender
会是g
实例吗?是的,sender会引用“触发”事件的OJBEC,为了清楚起见,最有可能是gI实例建议,您将顶部的类Foo
重命名为Bar
,以确保该类与Gizmo
中其他地方定义的Foo
事件无关。嗯,我并不是想把事情复杂化,但是如果这个在您的示例中指的是b
,那么在我的问题中,这个
不是指g
对吗?因为我的示例中的g
与您的示例中的a
相同(不是b
),对吗?在您的示例中,foodhandler()
是非静态方法。这意味着,此方法总是针对某个类的对象调用<代码>此
引用此对象。因此,在您的例子中,这个
将引用您拥有的g=newgizmo()的对象;g、 Foo+=新电动汽车