You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中手动无参空构造函数与编译器生成默认构造函数的区别

C#中手动定义无参空构造函数与编译器自动生成构造函数的区别

先看示例代码:

class Constructor
{
    Constructor()
    {
    }

    static void Main()
    {
        Constructor obj = new Constructor();
    }
}

class Compiler
{
    Compiler obj1 = new Compiler();
}

针对问题,二者核心区别如下:

  • 访问修饰符不同
    手动定义的无参构造函数如果不指定修饰符,默认是private(类成员的默认访问级别),仅当前类内部能实例化该类;而编译器自动生成的默认构造函数,访问级别和类本身一致——类是public则构造为public,类是internal则构造为internal,外部代码可正常实例化。

  • 对继承的影响不同
    当类显式定义了任意构造函数(包括这个无参空构造),编译器不会给它的子类自动生成默认构造函数,若子类未手动定义构造,编译会报错;而如果父类依赖编译器自动生成默认构造,子类没写构造时,编译器会自动给子类生成默认构造,并在其中调用父类的默认构造。

  • 代码意图的明确性不同
    手动写出无参构造,相当于明确告知其他开发者:这个类要保留无参实例化的能力,哪怕后续添加带参构造,这个无参构造也不会消失。而编译器自动生成的构造是隐式的,一旦给类添加任意带参构造,这个自动生成的无参构造会立刻消失,容易让未注意到的开发者在实例化时出错。

  • 执行逻辑的一致性
    排除访问修饰符差异,手动写的空无参构造和编译器自动生成的构造执行逻辑完全一致:都会先完成类中字段的初始化(比如示例里Compiler类的obj1字段初始化),再执行构造函数体(此处均为空)。

内容的提问来源于stack exchange,提问作者Viknesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 10:20:38