没有参数初始化的C#构造函数什么时候开始?

时间:2018-06-20 15:02:52

标签: c# constructor

我在尝试使用可能以另一种语言编写的供应商dll时遇到了一些奇怪的错误,这使我感到奇怪。 对于非静态类构造函数,其构造函数在什么时候被调用。 调用new时会发生这种情况吗(我以前认为是这样)。

public void initTool()
{ 
    vendorClass x = new vendorClass()
    int i =0;
    i++; ....

或者它可能会在代码中更早地发生,例如在主要形式类型定义中,其中x可以定义为该供应商类(因此定义某些内容将触发构造函数代码部分预先运行)。也许是jit优化的结果

public partial class Form1 : Form
{  
    vendorClass x;  // or vendorClass x=null;
    int i; ...

MSDN接缝地说,如果应将参数传递到构造函数中,则需要“ new”关键字。但是,如果不需要它,该怎么办?在这种情况下,将在保留它时调用dll类构造函数吗?。

请注意,此vendorClass.dll不是用C ++或纯C语言编写的C#,并且我没有它的代码

1 个答案:

答案 0 :(得分:1)

如果vendorClassclass的类型:

vendorClass x; // constructor is not called, variable x is uninitialized

vendorClass x = new vendorClass(); //constructor is called, x != null

struct类型有所不同:

vendorClass x; //  all members are default-initialized

vendorClass x = new vendorClass(); // the same