- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
让我们开始:
using System;
public class Program
{
class A
{
public virtual void Do() { }
}
class B:A
{
}
public static void Main()
{
var m1 = typeof(A).GetMethod("Do");
var m2 = typeof(B).GetMethod("Do");
Console.WriteLine("Methods are equal?\t\t{0}", m1 == m2);
Console.WriteLine("Method handles are equal?\t{0}", m1.MethodHandle == m2.MethodHandle);
Console.WriteLine("Done.");
Console.ReadKey();
}
}
(try it online 在 ideone)
因此,有两个不相等的 MethodInfo
实例,它们都包含相同的方法句柄。这是 the equals operator source :
public static bool operator ==(MethodInfo left, MethodInfo right)
{
if (ReferenceEquals(left, right))
return true;
if ((object)left == null || (object)right == null ||
left is RuntimeMethodInfo || right is RuntimeMethodInfo) // <----???
{
return false;
}
return left.Equals(right);
}
它看起来不像是一个意外错误,至少在假设 RuntimeMethodInfo
的所有实例都被缓存并且同一方法将有两个不同的实例之前是这样。在那种情况下,显然有什么东西坏了。
这种行为背后有什么原因吗?
附言请不要标记为 :) 问题不是关于“如何比较?”。这个问题被多次回答,here和 here例如。
谢谢!
最佳答案
我相信您对其背后推理的假设 - 两个 RuntimeMethodInfo
实例可以通过引用相等性进行比较 - 是正确的。不过,您认为它已损坏的假设并不正确。
这里的两个 MethodInfo
对象是不同的,因为它们具有不同的 ReflectedType
属性:
Console.WriteLine(m1.ReflectedType); // Program+A
Console.WriteLine(m2.ReflectedType); // Program+B
关于c# - RuntimeMethodInfo 相等 : bug?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27645408/
让我们开始: using System; public class Program { class A { public virtual void Do() { }
动态生成类型并调用 TypeBuilder.CreateType 后,我想创建一个指向新类型中方法的委托(delegate)。但是如果我使用像这样的代码 loadedType = typeBuilde
考虑以下 C# 代码: class Program { static public void Print(string toPrint) { Console.Write
假设我在 C# 中有以下类: public class B : A { public Int32 B_ID; public String B_Value; public Int
使用 nuget 安装程序安装了 WinSCP .net。 Visual Studio 2013 SSIS 投标 2012 项目引用正确 - 指向已安装的 DLL 项目包含一个脚本,它是来自 wins
我是一名优秀的程序员,十分优秀!