我正在寻找一种在运行时跟踪/监控变量的方法(不是用于调试),如果是这样的话就抛出某些事件。变化或超出范围。是否有.NET内置方法来执行此操作?比如,不是看着变量本身并持有对它的引用,而是在内存中分配它的位置?
丑陋的伪代码:
public class Dummy {
public void DummyMethod(int randomVar) {
randomVar = 4;
}
}
public class MyApp {
static void Main() {
var testVar = 1;
SuperVariableWatcher.Watch(testVar);
SuperVariableWatcher.NotifyOnChange += (sender, args) =>
_logger.Write("variable bla bla has changed.");
var dummy = new Dummy().DummyMethod(testVar);
// since Dummy changes testVar, NotifyOnChange would now
// be called, maybe with information about
// who has changed it, what value did it contain before
}
}
当然我可以在SuperVariableWatcher
中对它进行引用并检查每纳秒的变化,但即使它能够快速可靠地工作,我也无法看到变量是否已准备就绪被垃圾收集(因为没有引用它),因为我是那个持有引用的人。
我可以想到像 angularJS $watch
这样的东西,但是我不确定它是如何在内部工作的。
答案 0 :(得分:1)
这样做的惯用方法是使用带有notify-changed事件的属性。但是,您的想法中还存在一个基本问题:
// since Dummy changes testVar, NotifyOnChange would now
// be called,
不,它赢了; testVar
未更改。 testVar
中的Main
与<{1}}中的randomVar
完全不同,而DummyMethod
的更改不会表示对randomVar
的更改。该参数是一个值,按值传递:它是从testVar
读取的值的副本;它不是testVar
本身。
在一般情况下:不,不可能使用.NET(没有调试API等)来监视任意变量的更改,就像变量一样。这同样适用于领域。