出于记录目的,我们应用程序中的一些方法包括以下行:
Dim Log As ILog = GetLog(Reflection.MethodBase.GetCurrentMethod().DeclaringType)
我对反思有一种可以说是非理性的恐惧,我试图控制这种恐惧。然而,每秒可能执行一百次的方法中的此类调用令我担心。我对反思的了解还不够多。但通过简要浏览文档,在我看来我可以将以下内容替换为:
Dim Log As ILog = GetLog(Me.GetType())
我的问题有三个:
- Does
Me.GetType()
实际上返回相同的Type
as GetCurrentMethod().DeclaringType
?
- Does
Me.GetType()
实际上做任何事不同地 from GetCurrentMethod().DeclaringType
,或者它在幕后做着同样的事情?
- 我根本不应该担心这个吗?在此应用中,性能至关重要;该程序runs很好,但我们业务的性质是这样的,如果我们能在这里或那里减少哪怕几微秒,那就很有用了。
Me.GetType() 是否返回 GetCurrentMethod().DeclaringType?
这取决于。 Me.GetType 将始终返回对象的实际类型。 GetCurrentMethod().DeclaringType 将返回声明该方法的类型。这些值在继承场景中可能不同。
考虑以下
Class C1
Public Sub Foo()
..
End Sub
End Class
Class C2
Inherits C1
..
End Class
如果您处理的是 C1 的实例,则在方法 Foo 中,两个表达式将相等。但如果是C2,情况就不同了。
Me.GetType() 与 GetCurrentMethod().DeclaringType 有什么不同吗
是的,这些是非常不同的功能。 Me.GetType 确定类的当前实例的运行时类型。 GetCurrentMethod.DeclaringType 确定此方法声明的类型。
我根本不应该担心这个吗?
如果这是一个性能关键场景,那么是的,您要确保分析您不理解的 API。尤其是那些看起来涉及反思的内容。但只有分析器才能告诉您哪个绝对更快。不过我的钱在 Me.GetType 上。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)