我在尝试使用可能以另一种语言编写的供应商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#,并且我没有它的代码
答案 0 :(得分:1)
如果vendorClass
是class
的类型:
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