在运行时获取本地Field的值

时间:2017-01-20 10:55:19

标签: c# reflection local .net-assembly

我是c#的新手,我只是想知道是否有可能在运行时获取本地声明的字段的值?比如说下面例子中的ClassToTest不能改变。

示例:

public class ClassToTest {
  public void func() {
    int number = 25;
  }
}

Public class MyProgram {
  public static void Main() {
    ClassToTest instance = new ClassToTest();
    instance.func();
    // Can field "number" value be extracted here?
  }
}

我一直在通过反思和其他装配相关的东西,但仍然没有运气。任何建议都将受到高度赞赏。

4 个答案:

答案 0 :(得分:0)

这不是函数的工作方式。

public class ClassToTest {
  public int func() {
    return 25;
  }
}

Public class MyProgram {
  public static void Main() {
    ClassToTest instance = new ClassToTest();
    int number = instance.func();
  }
}

返回值的函数应该有一个返回类型(即int)和一个return(即返回25;),然后当int number = instance.func();运行时,func()方法将返回25并将其存储到int number

答案 1 :(得分:0)

没有

只有在函数内部时,本地变量才存在。退出该功能后,局部变量会消失在一团油腻的烟雾中。

您可以使用反射来访问属性(公共和私有。)

干杯,

亚当。

答案 2 :(得分:0)

您无法访问超出当前范围的变量,无论是另一种方法,还是仅仅是另一种切换案例。但是没有理由这样做,您可以通过在方法中设置属性来实现相同的目的:

public class ClassToTest {
    public int Number { get; private set; }
    public void func() {
        this.Number = 25;
    }
}

Public class MyProgram {
    public static void Main() {
        ClassToTest instance = new ClassToTest();
        instance.func();
        var i = instance.Number;
    }
}

我还使用了属性的公共getter与私有的setter一起使用,可以更改你的类中的Number - 值而不是来自外部。

其他人指出的另一种方法就是从func返回值。

答案 3 :(得分:-1)

这是不可能的,因为身体中声明的内容无法从外部范围访问。意味着你的变量只能在你的func()中使用 - 方法。您可以做的是返回您需要的值或声明属性。

public int Func()
{
  return 25;
}

public class MyProgram {
  public static void Main() {
    ClassToTest instance = new ClassToTest();
    int number = instance.func();
    //number will be 25
  }
}

使用Property可以这样工作:

public class ClassToTest {

  public int Number{get{return 25;};private set;}
}

Public class MyProgram {
  public static void Main() {
    ClassToTest instance = new ClassToTest();
    int number = instance.Number;
  }
}

使用方法或属性是您的决定。但你可以这样想:

"我的对象是什么?"和#34;我的对象可以做什么"。

例如汽车有车轮。因此,由物业代表一个轮子。但是汽车可以移动,所以实现运动作为方法。