在分配对象之前引用对象的最佳方法是什么?

时间:2018-04-20 11:01:52

标签: c# .net

对我来说,编码很多是关于清晰度和概述。因此,我很乐意调用在类的构造函数中尚未分配的对象。听起来像一个愚蠢的想法所以这里有一个例子(反正可能是愚蠢的):

// this doesn't work but looks clear
SomeClass a = new SomeClass(b, c);
SomeClass b = new SomeClass(a, c);
SomeClass c = new SomeClass(a, b);


// this functions but has bad overview:
SomeClass a = new SomeClass(null, null);
SomeClass b = new SomeClass(a, null);
SomeClass c = new SomeClass(a, b);
a.first = b;
a.snd = c;
b.snd = c;

底部有一个更好的方法吗?

对此的需求随着半边数据结构的实现而增加,其中边缘对象存储对另一个边缘对象的prev和下一个引用。我认为循环引用不是很好,但是例如列表也对每个下一个项目都有这样的参考。

3 个答案:

答案 0 :(得分:4)

不是在构造函数中指定边,而是在单独的方法中执行:

jQuery(window).resize(debounce(function(){
    resizeGrid([gridObj1, gridObj2]);
 }));

这看起来更具可读性。您可能需要添加一些保护机制以防止在分配边缘之前使用该类;但如果您在构造函数中接受空值,情况也是如此。

答案 1 :(得分:2)

这只是第一个想法,但我认为主要方法应该是将类创建与定义它们的关系分开。

也许这样的事情会起作用(不确定你的确切关系):

void Connect(SomeClass a, SomeClass b) {
    a.first = b;
    b.snd = a;
}

并使用它:

SomeClass a = new SomeClass();
SomeClass b = new SomeClass();
SomeClass c = new SomeClass();

Connect(a, b);
Connect(a, c);
Connect(c, b);

(那种设计仍然不完美,但至少要说清楚恕我直言会发生什么)

答案 2 :(得分:0)

不幸的是,没有办法实现这一点,因为它是循环依赖。

  • 你需要一辆车去上班(Someclass a = new Someclass(b))
  • 你需要钱买车(Someclass b = new Someclass(c))
  • 你需要努力赚钱(Someclass c = new Someclass(a))

这不合适,你必须用其他东西替换一个项目。步行去,不需要钱!

交换2个变量的值时遇到同样的问题:

var a = 5;
var b = 2;
var tempvar = a;
a = b;
b = tempvar;

您必须摆脱依赖关系或在初始化后绑定它们。这是一个逻辑问题,没有编程问题。