【问题标题】:How to prevent use of default constructor? [duplicate]如何防止使用默认构造函数? [复制]
【发布时间】:2014-03-29 18:31:30
【问题描述】:

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

public struct test
{
    public int val;

    public test (int a)
    {
        val = a;
    }
}

但我注意到可以使用默认构造函数初始化结构。可以预防吗?

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

【问题讨论】:

  • 不再重复,现在这是关于结构的。
  • 你想要实现的在 C# 中是不可能的stackoverflow.com/questions/535328/…
  • 类和结构之间存在差异,这种行为就是其中之一。因为我没有看到 C# 中的结构有任何好处,所以我所有的结构现在都是值对象。对我来说,struct 似乎是让 C/C++ 程序员熟悉 C# 的一个特性,但在这种语言中并没有固有的好处。

标签: c#


【解决方案1】:

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

【讨论】:

  • 因为我打算将它包含在我的答案中,所以这里是一个结构的 C# 规范:msdn.microsoft.com/en-us/library/0taef578.aspx
  • 为什么可以上课?
  • @NachiketKamat 类是可能的,因为 C# 语言设计者使之成为可能。更重要的是,如果不调用 CLR 中的构造函数,就无法初始化类,但结构体却可以。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-04
  • 1970-01-01
  • 2014-03-24
  • 1970-01-01
  • 2020-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多