我相信这是一个艰难的...
我正在尝试在类中创建变量绑定的集合。
打算看起来像这样:
Dim x as integer, s as string
Dim c as new VBindClass
x = 1
s = "Hello"
c.Add x, s
Debug.Print c.value(x) '= 1
Debug.Print c.value(s) '= "Hello"
是否有某些功能允许我们检索给定变量的唯一ID并根据变量获取/设置?
更新
最后,我找到了答案。这是代码:
Dim gh As Runtime.InteropServices.GCHandle = Runtime.InteropServices.GCHandle.Alloc(obj)
Return Runtime.InteropServices.GCHandle.ToIntPtr(gh).ToInt64
答案 0 :(得分:1)
你不能直接绑定到方法变量,因为a:它们没有反射,而b:它们在编译器通过时可能实际上不存在。此外,在实现方面,像类(VBindClass
)这样的东西可以访问当前的堆栈位置(因为两者相隔数英里)会非常混乱。
您可以使用反射(Type.GetFields(...)
来反映字段(类/结构上的变量),通常需要非公共实例绑定标志。
对于您的示例,“捕获的变量”可能有用,但您需要使用lambdas /表达式才能工作。但在C#术语中:
int x = 1;
Action a = () => Debug.WriteLine(x);
// can now hand "a" anywhere, including to other classes, into events etc
x = 27;
//now invoke a **from anywhere** - it'll show the current value (27)
a();
答案 1 :(得分:0)
IF 我理解你正在寻找的东西你可能想看一下使用