【问题标题】:MethodBase.GetCurrentMethod() reflection line explanationMethodBase.GetCurrentMethod() 反射线解释
【发布时间】:2012-06-08 21:25:24
【问题描述】:

我正在从 C++ 过渡到 C#,并且我有一个让我感到困惑的方法调用。我想我可能能够猜到它的作用,但我希望专家能直接告诉我:

WDResult returnValue = (WDResult)Invoke(
    (MethodInfo)MethodBase.GetCurrentMethod(),
    new object[] { request, loadType });

在我看来,它使用反射来获取已经被调用的方法。我不明白为什么有人会这样做,如果是这样的话。另外,为什么要使用反射而不是递归调用呢?请注意,在代码中,调用中没有使用不同的重载。参数 request 和 loadType 几乎直接传递到该代码中出现的函数的第一行。

【问题讨论】:

    标签: c# reflection syntax .net-3.5


    【解决方案1】:

    这调用了一个自定义的Invoke() 方法,该方法采用MethodInfo
    这不是标准反射。

    查看Invoke() 方法,了解他们这样做的原因。

    【讨论】:

    • 出于好奇,那是什么?
    • 很多地方都这么叫。它接受调用函数中正在进行的任何命令,并以通用方式处理它以压缩参数(它们很大)、提供加密并分派到 rpc api。我不太确定它在原始设计中的用途 - 它看起来更像是一个全面的补丁 - 所有功能都被转发到这个,参数让这个在提供的同时动态处理原始请求压缩/加密/调度。我的猜测是 RPC api 以前没有使用过,它以前是本地调用。
    • 不幸的是,在我重新打开 Visual Studio 之前,我的“转到定义”由于某种原因无法正常工作,所以我认为它更复杂 :(
    【解决方案2】:

    另外,为什么要使用反射而不是递归调用呢?

    您可以将该行复制粘贴到其他方法中,只要它们采用相同的参数,它仍然可以工作。

    【讨论】:

    • 感谢您的洞察力。 :)
    猜你喜欢
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    相关资源
    最近更新 更多