我正在构建一个分层集合类,它在空间上对磁共振图像进行排序,并根据用于生成它们的各种采集参数将它们排列成组。用于执行分组的具体方法由类的用户提供。我在下面的示例代码中提取了相关功能。对于 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/