C# 在运行时获取本地字段的值
我对c真的很陌生,我只想知道是否有可能在运行时获取本地声明字段的值?例如,假设下面示例中的ClassToTest不能更改 例如:C# 在运行时获取本地字段的值,c#,reflection,local,.net-assembly,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(); in
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?
}
}
我一直在寻找反射和其他与组装相关的东西,但仍然没有运气。任何建议都将不胜感激。这不是函数的工作方式
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,这是不可能的,因为无法从外部范围访问正文中声明的内容。意味着您的变量仅在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
}
}
对于一个属性,它可以像这样工作:
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;
}
}
使用方法或属性是您的决定。但你可以这样想:
我的对象由什么组成?我的对象可以做什么
例如,汽车有轮子。所以用一个属性来表示一个轮子。但是汽车可以移动,所以将移动作为方法来实现。您无法访问超出当前范围的变量,无论是另一种方法,甚至只是另一种开关情况。但是,没有理由这样做,您可以通过在方法中设置属性来执行相同的操作:
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,这样就可以从类内部而不是外部更改数值
其他人指出的另一种方法就是从func返回值 不,这是不可能的,也没有理由这样做。编号的作用域是方法而不是类。您还应该从可以编译的发布代码开始。自己测试一下,看看是否可以让它运行。如果你想要这个值,那么就从方法返回它,或者创建一个类/实例范围的属性并设置它的值。原来我正在做的程序比这个要复杂得多。而且我不能重构ClassToTest,它非常简单。该方法设置值,但一旦它超出范围,即该方法完成变量的运行,其值就会从堆栈中弹出。没有办法得到那个值。也不要试图获取值,这只是非常糟糕的编程实践。你会破坏封装。如果您对该值感兴趣,请找到一种方法,在知道该值的实例上设置该值,或返回该值,或编写一个新方法重新计算该值。我在考虑可能在单独的线程上运行该方法。然后,执行Thread.sleep或类似操作以阻止其关闭。然后,使用反射来获取值?这将不起作用,因为您仍然无法访问该变量,即使它起作用,也纯粹是过火了。原来我正在做的程序比这个要复杂得多。而且我也不能重构ClassToTest。@AngeloCharl您必须更改该类才能从func中获得值,或者重新思考您的完整方法。您无法访问变量,因为在您的案例中,当离开范围时,方法变量不再存在。