C# 如何防止使用默认构造函数?

C# 如何防止使用默认构造函数?,c#,C#,我们正在创建一个简单的结构,其构造函数接受一个参数 public struct test { public int val; public test (int a) { val = a; } } 但是我注意到,可以使用默认构造函数初始化结构。这能预防吗 test t1 = new test(); //why does this work? 不能阻止在C#中为值类型使用默认构造函数。C#规范需要一个默认构造函数,编译器会自动添加它(事实上,

我们正在创建一个简单的结构,其构造函数接受一个参数

public struct test
{
    public int val;

    public test (int a)
    {
        val = a;
    }
}
但是我注意到,可以使用默认构造函数初始化结构。这能预防吗

test t1 = new test();   //why does this work?

不能阻止在C#中为值类型使用默认构造函数。C#规范需要一个默认构造函数,编译器会自动添加它(事实上,您无法显式定义它)。运行时提供可以创建任何值类型,而无需调用“全零”实例的构造函数。我猜C语言设计者决定通过要求结构使用默认的无参数构造函数,使CLR的这一特性更加明确。

不能阻止在C语言中使用默认构造函数来表示值类型。C#规范需要一个默认构造函数,编译器会自动添加它(事实上,您无法显式定义它)。运行时提供可以创建任何值类型,而无需调用“全零”实例的构造函数。我猜C语言设计者决定通过为结构要求一个默认的无参数构造函数来使CLR的这一特性更加明确。

现在这是关于结构的,不再重复了。你想在C语言中实现的是不可能的,类和结构之间有区别,这种行为就是其中之一。由于我看不到C#中的结构有任何好处,我的所有结构现在都是值对象。在我看来,结构似乎是让C/C++程序员熟悉C#的一个功能,但在这种语言中没有任何固有的好处。现在这是关于结构的,不再是重复。在C#中你想要实现的是不可能的,类和结构之间有区别,这种行为就是其中之一。由于我看不到C#中的结构有任何好处,我的所有结构现在都是值对象。对我来说,结构似乎是让C/C++程序员熟悉C#的一项功能,但在这种语言中没有固有的好处。因为我要在我的答案中包含它,下面是结构的C#规范:为什么类可能?@NachiketKamat类可能,因为C#语言设计者使之成为可能。更重要的是,如果不在CLR中调用构造函数,就无法初始化类,但是对于结构,却有一种方法。因为我要将它包括在我的答案中,下面是C#spec for a struct:Why is it can be class?@NachiketKamat它对于类是可能的,因为C#language Designer使之成为可能。更重要的是,如果不在CLR中调用构造函数,则无法初始化类,但对于结构,则没有。