如何在其他方法中访问变量

时间:2012-04-12 19:18:06

标签: c# .net-4.0

我不知道如何解释我想要的正确。这是一个例子^

public void foo()
{
  StackFrame trace = new StackFrame(1);
  MethodBase method = trace.GetMethod(); //so, here we'll get bar-method info
  MthodBody body = method.GetMethodBody(); //and here we'll get bar-method body
  /*now i need get access to the local vars in bar
    i know about MethodBody.LocalVariables
    but i don't have any idea how i can get values of variables i and hello,
    that defined in bar-method. I think it may be possible if i'll get
    pointers to the vars,
    and then copy it with Marshal.Copy*/
}

public void bar()
{
  int i = 42;
  string hello = "Hello!";
  foo();
}

PS 我希望我的例子并不可怕,你明白我到底想要什么。 PPS 请原谅我糟糕的坏英语:)

2 个答案:

答案 0 :(得分:0)

我想,你真正要做的是某种方法拦截(我认为你试图记录参数值或者类似的)。看看温莎城堡的PostSharp http://www.sharpcrafters.com/blog/post/Day-7-Interception-Aspects-e28093-Part-1.aspxDynamicProxy

答案 1 :(得分:-1)

如果在方法中声明 local 变量,则在执行该方法后该变量的值将会丢失( update: 在这种情况下它实际上不是;我重写了方法调用 - 抱歉)。没有办法从这种方法中获取价值,因为实际上并没有。

如果要在多个方法中重用变量,请为此创建字段或属性:

public class FooBarClass
{
    private int _numberToReuse = 0;

    public void Foo()
    {
        _numberToReuse = 10;
    }


    public void Bar()
    {
        DoSomething(_numberToReuse);
    }
}

您的示例代码看起来非常简单。是不是可以将这两个值传递到bar中?像bar(i, hello)一样。想想你的方式是否值得采用昂贵的反思方法。