我有三个对象:
private static readonly Apple a, c;
private readonly Orange b;
这段代码是从我的构造函数中调用的:
public SomeClass()
{
a = new Apple();
b = new Orange(a.getDna());
c = new Apple(b.getDna());
}
当我使用静态或只读修饰符时,会出现“只读字段不能用作赋值目标”的错误。如果我删除其中一个修饰符,则可以编译成功。(这里有错误警告吗?)
在查看其他 SO 答案时,我发现应该使用静态构造函数,例如:
static SomeClass()
{
a = new Apple();
c = new Apple(b.getDna());
}
public SomeClass()
{
b = new Orange(a.getDna());
}
但这样会导致静态构造函数首先被调用,并且由于b未初始化而导致错误。
我该如何规避这个问题?
附言:我相对较新于C#。
c = new Apple(b.getDna());
)?这没有意义(并且会引发编译时错误),并且从远处就能闻到气味。要访问b
,您需要一个实例,而在静态上下文中您没有实例(没有this
)。您应该重新考虑设计以及您所针对的所有静态/非静态
内容。 - Jclc
)依赖于实例成员(b
),这绝不是一个好主意。 - Jenish Rabadiya