可以在构造函数中引用"this"吗?

Pet*_*ter 6 .net c# constructor this winforms

在C#中,我使用的常见模式是使用表单对象填充较低计算类的详细信息.

MyForm的构造函数是:

MyForm()
{
   _MyFormCalcs = new MyFormCalcs(this);
}
Run Code Online (Sandbox Code Playgroud)

但是我今天遇到了一个错误,这让我觉得当我的构造函数没有完成时,它会创建一个新的MyForm实例来传递给MyData.因此它调用构造函数两次.我发现MyFormCalcs中的静态列表被填充两次并且第二次失败,因为密钥已经存在于列表中.

我可以在构造函数中使用它来引用此实例吗?它在低级类中包含什么 - 是否运行了构造函数.

将表格传递给下层阶级的更好方法是什么?

Jon*_*eet 9

不,这不会创建新的实例MyForm.

通常,允许this从构造函数"转义"是危险的,因为这意味着它可以在构造函数完成之前使用,但它不会创建新实例.如果您能给出一个简短而完整的问题示例,我们可以帮助您进一步诊断.特别是,你不清楚"静态列表被填充两次"是什么意思.通常,在实例构造函数中填充静态变量并不是一个好主意.