e.g
Class A
{
readonly Bclass B;
readonly Cclass C;
public void Class()
{
Action1();
Action2();
Action3();
}
void Action2()
{
Dosomething1();
B=Dosomething2(); //There goes the problem.
C=Dosomething3();
Dosomething4();
}
...
}
顺便说一句,我知道我可以将所有Dosomthing()放入构造函数中,但代码因此变得不那么可读。
答案 0 :(得分:0)
您可以重构A
,以便将B
作为仅包含setter的属性公开:
public class A
{
public A()
{
_b = DoSomething();
}
private BClass MyClassB
{
get { return _b; }
}
private BClass _b;
}
您可能会做一些其他事情,但很难确切地看到使用readonly
B
{{1}}实例的问题。它将以这种方式完成,使其成为不可变的 - 一旦在构造函数中设置它就无法在类中的任何其他地方进行更改 - 请注意,如果使用上面说明的属性,则会失去不变性。
答案 1 :(得分:0)
Class A
{
readonly Bclass B;
readonly Cclass C;
public void Class()
{
Action1();
Tuple<B,C> init = Action2();
B = init.B;
C = init.C;
Action3();
}
}
不幸的是,C#缺乏元组支持,所以你不能写
B, C = Action2();