在此代码段中,新的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#

09-13 13:46