首页 > 解决方案 > 为什么添加参数化构造函数时默认构造函数不起作用?

问题描述

如果我们在类中只有一个参数化构造函数,那么为什么我们不能使用默认构造函数创建对象呢?与添加参数化构造函数之前一样,类中没有默认构造函数!尽管如此,可以通过默认构造函数创建 lass 的实例。但是在添加参数化构造函数后,默认构造函数停止工作。为什么?

谁能解释一下?

class Program
{
    static void Main(string[] args)
    {
        Test test = new Test(); //instance created using parameterized constructor

        Test2 test = new Test2(); //instance can not be created using default constructor

    }

    class Test
    {
        //no constructor present
    }

    class Test2
    {
        public Test2(int a)
        {
            //parameterized constructor present
        }

    }

}

标签: c#oop

解决方案


如果您不添加任何构造函数,编译器会为您添加一个无参数构造函数作为默认构造函数。

如果添加任何构造函数,则不会添加默认构造函数。如果您仍然需要无参数构造函数,则需要手动添加它。

官方文档说:

像这样不带参数的构造函数称为默认构造函数。

[……]

如果一个类没有构造函数,则会自动生成一个默认构造函数,并使用默认值来初始化对象字段。

当您添加参数化构造函数时,您基本上是在说此类需要这些特定参数才能正确初始化。如果无参数构造函数仍然有效,您将无法强制使用该特定构造函数。您必须定义一个私有默认构造函数以避免使用它。


推荐阅读