如何执行引用分配
本文关键字:引用 分配 执行 何执行 | 更新日期: 2023-09-27 18:27:54
尽量不要太在意我在这里做的事情,这只是一个例子:
var @string = new RegexTerm("...");
var literal = new RegexTerm("...");
var key = @string | literal;
var dict = new Term();
var value = key | dict;
var kvp = key | value;
var item = key | kvp;
var set = item + !("," + item);
dict = "{" + set + "}";
我有一种循环关系。value
需要定义dict
,而dict
需要定义value
。
所以我所做的是将dict
初始化为某个占位符Term,这样我就可以在下面的赋值中使用它,然后我稍后会给出它的实际值
问题是现在value
不再引用最后一行中定义的同一对象。我本质上想在不创建新对象的情况下重新分配dict
。
有没有办法做到这一点而不添加二传手?这将需要我在AndTerm
上创建一个公共的无参数构造函数,然后添加一个Set
方法,这就不那么漂亮了,并且允许您构造无效对象。
或者有什么神奇的方法可以重新分配dict
指向一个新对象并更新所有现有的引用?显然,我不允许=
运算符过载。
想出了一个解决方案。我添加了一个额外的术语,称为ProxyTerm
:
var dict = new ProxyTerm();
var value = key | dict;
...
dict.Term = "{" + set + "}";
这使我可以将基本Term
类保持为抽象类,这样我就不需要公开任何私有变量或添加任何setter。
解决方案是针对接口或抽象库进行编码,并使用代理模式。
class ProxyTerm : ITerm {
ITerm Reference { get; set; }
ITerm.SomeMethod() {
Reference.SomeMethod();
}
}
这样你以后就可以插入真正的参考了。