为什么我可以在C#中实例化一个没有构造函数的类
本文关键字:一个 构造函数 我可以 实例化 为什么 | 更新日期: 2023-09-27 18:24:20
C#中的类怎么可能没有定义构造函数?例如,我有一个类
internal class TextStyle
{
internal string text = "";
internal Font font = new Font("Arial", 8);
internal Color color = Color.Black;
}
在代码中,这个类被实例化为
TextStyle textParameters = new TextStyle();
如果没有为非静态类声明任何构造函数,编译器将为您提供一个公共的(或为抽象类保护的)无参数构造函数。你的类实际上有一个构造函数:
public TextStyle()
{
}
这在C#4规范的10.11.4节中有描述:
如果一个类不包含实例构造函数声明,则会自动提供默认的实例构造函数。该默认构造函数只是调用直接基类的无参数构造函数。如果直接基类没有可访问的无参数实例构造函数,则会发生编译时错误。如果类是抽象的,那么为默认构造函数声明的可访问性是
protected
。否则,默认构造函数声明的可访问性为public
。
C#中唯一没有任何实例构造函数的类是静态类,它们不能有构造函数。