尽管覆盖了结构默认构造函数,但仍会使用它

Bra*_*iat 3 c# struct

我有以下代码:

struct Person
    {
        public readonly int x;

        public Person( int x )
        {
            this.x = x;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person();
            Console.Write(p.x);
        } 
    }
Run Code Online (Sandbox Code Playgroud)

这段代码运行良好。为什么?覆盖默认构造函数没有应用于 structs 吗?使用参数化构造函数是否覆盖默认构造函数?

p.s*_*w.g 5

您没有覆盖默认构造函数;您刚刚提供了一个接受一个参数的重载。与类不同,结构的参数化构造函数并不意味着不会自动生成默认构造函数。C# 编译器会自动为结构提供一个默认的、无参数的构造函数,并且不允许您用自己的构造函数覆盖它。这就是结构的本质。

使用结构(C# 编程指南)

为结构定义默认(无参数)构造函数是错误的。在结构体中初始化实例字段也是错误的。您只能通过使用参数化构造函数或在声明结构后单独访问成员来初始化结构成员。任何私有成员或其他无法访问的成员只能在构造函数中初始化。

如果您真的想要求您的数据类型的用户调用自定义构造函数,则必须改用类。