c# - 测试委托(delegate)是否平等

标签 c# delegates equality

我正在构建一个分层集合类,它在空间上对磁共振图像进行排序,并根据用于生成它们的各种采集参数将它们排列成组。用于执行分组的具体方法由类的用户提供。我在下面的示例代码中提取了相关功能。对于 IEquatable<MyClass>实现,我希望能够比较 _myHelperDelegate两个 MyClass 的属性实例以确定两个委托(delegate)是否指向同一段代码。 (_myHelperDelegate == other._myHelperDelegate)下面 if 语句中的子句显然是执行此操作的错误方法(它无法编译,给出错误“预期的方法名称”)。我的问题是,有没有办法比较两个委托(delegate)以确定它们是否引用同一段代码?如果是这样,你是怎么做到的?

public class MyClass : IEquatable<MyClass>
{
   public delegate object HelperDelegate(args);
   protected internal HelperDelegate _myHelperDelegate;

   public MyClass(HelperDelegate helper)
   {
      ...
      _myHelperDelegate = helper;
   }

   public bool Equals(MyClass other)
   {
      if (
          (_myHelperDelegate == other._myHelperDelegate) &&
          (... various other comparison criteria for equality of two class instances... )
         )
         return true;
      return false;
   }
}

最佳答案

以下编译并按预期工作。

private void Form1_Load(object sender, EventArgs e)
{
    var helper1 = new TestDelegates.Form1.MyClass.HelperDelegate(Testing);
    var helper2 = new TestDelegates.Form1.MyClass.HelperDelegate(Testing2);
    var myClass1 = new MyClass(helper1);
    var myClass2 = new MyClass(helper1);

    System.Diagnostics.Debug.Print(myClass1.Equals(myClass2).ToString()); //true

    myClass2 = new MyClass(helper2);
    System.Diagnostics.Debug.Print(myClass1.Equals(myClass2).ToString()); //false

}

private object Testing()
{
    return new object();
}
private object Testing2()
{
    return new object();
}

public class MyClass : IEquatable<MyClass>
{
   public delegate object HelperDelegate();
   protected internal HelperDelegate _myHelperDelegate;

   public MyClass(HelperDelegate helper)
   {
     _myHelperDelegate = helper;
   }

   public bool Equals(MyClass other)
   {
      if (_myHelperDelegate == other._myHelperDelegate)
      {
         return true;
      }
      return false;
   }
}

关于c# - 测试委托(delegate)是否平等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5198606/

相关文章:

ios - AppDelegate 文件在哪里适合 MVC?

c# - Action<T> vs 匿名方法问题

php - 如何在 phpunit 中进行严格的相等/三重相等比较?

c# - 从 JSON 响应打印特定值

c# - 如何根据许多选项确定 VAR?

c# - SignalR:是否可以在建立连接时强制连接在服务器端使用特定传输?

java - 确定嵌套 Foreach 循环中的当前对象是否相同

c# - 关闭 RabbitMQ 连接,即使应用程序没有正常结束

ruby - 向类中添加字符串功能

java - 如何在 Java 中比较字符串?