c# - 为什么添加参数化构造函数时默认构造函数不起作用?
问题描述
如果我们在类中只有一个参数化构造函数,那么为什么我们不能使用默认构造函数创建对象呢?与添加参数化构造函数之前一样,类中没有默认构造函数!尽管如此,可以通过默认构造函数创建 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
}
}
}
解决方案
如果您不添加任何构造函数,编译器会为您添加一个无参数构造函数作为默认构造函数。
如果添加任何构造函数,则不会添加默认构造函数。如果您仍然需要无参数构造函数,则需要手动添加它。
官方文档说:
像这样不带参数的构造函数称为默认构造函数。
[……]
如果一个类没有构造函数,则会自动生成一个默认构造函数,并使用默认值来初始化对象字段。
当您添加参数化构造函数时,您基本上是在说此类需要这些特定参数才能正确初始化。如果无参数构造函数仍然有效,您将无法强制使用该特定构造函数。您必须定义一个私有默认构造函数以避免使用它。
推荐阅读
- json - Postman Response 下载在 Atom 和其他编辑器中并不漂亮
- android - 从 History api 接收的步骤数据与 google fit 不匹配
- php - 创建 ECC 密钥时 PHP openssl_pkey_new() 抛出错误
- .net - 如何批量修改.Net程序集中的类修饰符从内部到公共?
- asp.net - dot net mvc5 控制器中的异步函数创建死锁
- odoo - Odoo 返回动作或警告
- c# - Asp.net core - 调用方法()不在中间件中调用
- oauth-2.0 - 即使我通过了必需的选项,也没有第二次从 Google OAuth2 收到 refresh_token
- html - 并排制作两张桌子
- javascript - HTTPS 导致 CSS 动画无法加载?很困惑