没有构造函数的C#类

TOP*_*KEK 13 .net c# constructor class

C#中的类怎么可能没有定义构造函数?比如我有一个班级

internal class TextStyle
{
    internal string text = "";
    internal Font font = new Font("Arial", 8);
    internal Color color = Color.Black;
}
Run Code Online (Sandbox Code Playgroud)

在代码中,这个类被实例化为

TextStyle textParameters = new TextStyle();
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 38

如果您没有为非静态类声明任何构造函数,则编译器会为您提供public(或受抽象类保护)无参数构造函数.你的类有效地有一个构造函数:

public TextStyle()
{
}
Run Code Online (Sandbox Code Playgroud)

这在C#4规范的第10.11.4节中描述:

如果类不包含实例构造函数声明,则会自动提供默认实例构造函数.该默认构造函数只是调用直接基类的无参数构造函数.如果直接基类没有可访问的无参数实例构造函数,则会发生编译时错误.如果类是抽象的,那么默认构造函数的声明可访问性是protected.否则,默认构造函数的已声明可访问性为public.

C#中唯一没有任何实例构造函数的类是静态类,它们不能有构造函数.

  • @Liam:现在找到了源代码,正如预期的那样,有一个内部构造函数:https://github.com/Azure/azure-sdk-for-net/blob/548336e6537d87ee9c1a179b7677620dddf13225/sdk/storage/Azure.Storage.Blobs/ src/Models/BlobInfo.cs#L79 (4认同)
  • @Liam:我无法轻松找到该类的源代码(通过两分钟的搜索...),但我希望它有一个构造函数 - 只是不是一个可公开访问的构造函数。如果它没有在源代码中声明任何构造函数,我希望看到由构造函数生成的无参数构造函数被记录下来(大概没有任何文本,只是注意到它的存在)。这里的*语言*没有任何变化。 (2认同)