Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从MethodBase类实例获取对象_C#_.net_Reflection - Fatal编程技术网

C# 如何从MethodBase类实例获取对象

C# 如何从MethodBase类实例获取对象,c#,.net,reflection,C#,.net,Reflection,我有一个模块),我可以用属性扩展我的类。当我的类的方法被执行时,调用一个静态方法(在另一个类中) 基本上,在方法调用完成后,就会执行Log方法。如您所见,它获得了一个MethodBase参数,并具有描述调用此方法调用的方法所需的所有内容 我的问题是,如果可以从.NET MethodBase类实例中获取调用日志方法调用的对象。否。MethodBase是从类型而不是实例中提取的。如果要调用实例上的方法,则需要将实例作为参数传入 即使可以,您如何知道在调用该方法时要使用哪些参数值 这就是为什么所有内置

我有一个模块),我可以用属性扩展我的类。当我的类的方法被执行时,调用一个静态方法(在另一个类中)

基本上,在方法调用完成后,就会执行Log方法。如您所见,它获得了一个MethodBase参数,并具有描述调用此方法调用的方法所需的所有内容


我的问题是,如果可以从.NET MethodBase类实例中获取调用日志方法调用的对象。

否。
MethodBase
是从类型而不是实例中提取的。如果要调用实例上的方法,则需要将实例作为参数传入

即使可以,您如何知道在调用该方法时要使用哪些参数值


这就是为什么所有内置事件处理程序都有一个
对象发送者
参数的原因,这样您就知道是哪个对象触发了事件。

否。
方法库
是从类型而不是实例中提取的。如果要调用实例上的方法,则需要将实例作为参数传入

即使可以,您如何知道在调用该方法时要使用哪些参数值


这就是为什么所有内置事件处理程序都有一个
object sender
参数的原因,这样您就知道是哪个对象触发了事件。

您是否在问如何为当前方法获取stacktrace(在您的例子中是调用方法)?那么这可能会对您有所帮助:不,我想对调用Log方法的对象进行一些更新。我将在editStack跟踪中进行更多解释,它将为您提供调用
Log
函数的方法,而不是对象。在静态方法中,没有调用该方法的实例,否则您可以使用
this
-指针。我需要发送方,就像在EventHandlera中一样。您是否询问如何获取stacktrace(在您的情况下是调用方法)对于当前方法?那么这可能会对您有所帮助:不,我想对调用Log方法的对象进行一些更新。我将在editStack跟踪中进行更多解释,它将为您提供调用
Log
函数的方法,而不是对象。在静态方法上,没有调用该方法的实例,否则您将可以使用
这个
-指针。我想要发送方,就像在EventHandler中一样。发送方正是我想要的,所以我想从发送方添加一个参数-为什么这不是一个选项?Fody是一个MethodWear。代码在生成时才存在。它被“生成”在构建时和我无法控制的情况下,发送方正是我想要从发送方添加一个参数的对象-为什么这不是一个选项?Fody是一个methodVeawer。代码在构建时才存在。它在构建时“生成”,我无法控制
public  class CommandBase
{
    [Time]
    public bool test()
    {
        return true;
    }
}

public static class MethodTimeLogger
{
    public static void Log(MethodBase methodBase, long milliseconds)
    {
        //Do some logging here
    }
}