如何执行引用分配?

时间:2012-03-16 04:26:22

标签: c#

尽量不要太在意我在这里做的事情,这只是一个例子:

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

有没有办法在不添加setter的情况下执行此操作?这需要我在我的AndTerm上创建一个公共无参数构造函数,然后添加一个Set方法,它不是很漂亮,并允许你构造无效的对象。

或者是否有一些神奇的方法可以重新分配dict以指向新对象并更新所有现有引用?显然我不允许重载=运算符。


想出一个解决方案。我添加了一个名为ProxyTerm的额外术语:

var dict = new ProxyTerm();
var value = key | dict;
...
dict.Term = "{" + set + "}";

这允许我将基类Term类保持为抽象,然后我不需要公开任何私有变量或添加任何setter。

1 个答案:

答案 0 :(得分:1)

解决方案是针对接口或抽象基础进行编码并使用代理模式。

class ProxyTerm : ITerm {

     ITerm Reference { get; set; }

     ITerm.SomeMethod() {
          Reference.SomeMethod();
     }

}

这样你就可以在之后插入真实的参考资料。