我需要在我的代码中放置一个位置,当其他变量依赖于变量时,变量会自动更新。
与电子表格的区别在于我不想要所有解析内容,我只想在代码中完成所有操作,因为在编译程序后我不需要更新公式/变量。
基本上有输入数据,电子表格部分中的一些“单元格”将监听这些值,更改,并且更改将通过“电子表格”部分传播。像普通的电子表格一样。
所以我可以立即依赖所有这些值,而不是必须先编写各种代码才能正确地更新所有变量,这很难做到。
如果有人能帮助我实现这个思维过程,那真的会有所帮助!我一直在阅读一些电子表格源代码,但需要很长时间才能理解,然后了解我将如何改变这些想法以适应我需要做的事情。
编辑: 现在我只是把东西放在循环中并正确地构造所有内容,以便正确更新:
A1 = 2;
B1 = A1 + 2;
然后这只是一次又一次地循环。但是如果我想让事情自动更新,我如何存储附加到变量的计算?所以当更新B时,它会调用A1 + 2?
顺便说一下A1和B1只是随机变量。我没有用单元名称来命名,也没有这样的结构。
答案 0 :(得分:1)
存储计算的一种方法是使用已构建到C#中的函数式编程元素。
可以使用Func<T1,T2,...TResult>
个代表之一将公式存储为函数。
var CalculationForX = new Func<double, double, double>(
(arg1, arg2) => arg1 * arg2
);
这里,CalculationForX
指定一个带两个双精度的函数,并返回两个双精度的乘积。然后使用例如CalculationForX(5, 2)
返回10。
因此,跟踪所有依赖关系的直接方法是为每个因变量存储一个对象,包含其公式和输入。这些可以是:
PropertyInfo
数组Action<T1,T2>
委托代表实际的属性设置器每当收到属性更改事件时,检索计算以及所有依赖于它的变量的输入,并更新目标值。
(我对你提出这个问题很有意思,因为我昨天在Programmers问了一个非常相似的问题。)