在此代码段中,新的MyDel(this.WelcomeUser)如何工作?内存中发生了什么,我知道委托是引用类型,所以在堆中创建了一个对象,它是哪种类型的对象-MyDel?究竟是this.WelcomeUser是什么?它是对方法的引用吗?
using System;
namespace SampleApp {
public delegate string MyDel(string str);
class EventProgram {
event MyDel MyEvent;
public EventProgram() {
this.MyEvent += new MyDel(this.WelcomeUser);
}
public string WelcomeUser(string username) {
return "Welcome " + username;
}
static void Main(string[] args) {
EventProgram obj1 = new EventProgram();
string result = obj1.MyEvent("Tutorials Point");
Console.WriteLine(result);
}
}
}
最佳答案
new MyDel(this.WelcomeUser)
如何工作?
这是对构造函数的调用,以this.WelcomeUser
作为参数。
public delegate string MyDel(string str);
是类型定义。编译器使用它来生成从
System.Delegate
派生的类。请注意,这是在C#具有泛型之前设计的。究竟是this.WelcomeUser是什么?
它是方法的名称。在C#(以及C,C ++等)中,方法始终带有参数(或参数)列表,即使该列表为空:
SomeMethod()
。省略列表等同于地址。
当您查看VB.NET时,它变得更加清楚,等效代码为
MyEvent += new MyDel(this.WelcomeUser); // C#
AddHandler MyEvent, AddressOf Me.WelcomeUser ' VB
从C#2开始,您可以使用简称:
MyEvent += this.WelcomeUser; // modern C#