Structure中的无参数构造函数

Jon*_*ton 7 vb.net visual-studio-2015

这个关于在Visual Studio 2015中使用不同Visual Basic版本的问题之后,我将在Visual Basic 14中运行新的语言功能,如此此处所述.

其中之一是能够在结构中使用无参数构造函数,如下所示:

Structure MyStruct1
   Public f As Integer
   Sub New()
      f = 15
   End Sub
End Structure
Run Code Online (Sandbox Code Playgroud)

当我在Visual Studio 2015中的代码中尝试此操作时,我仍然会在以下情况下出现红色错误波形New():

BC30629结构不能声明没有参数的非共享"Sub New".

我还没有看到任何说明在发布之前被拉掉的地方.

我误解了这个新功能的作用吗?

Bjø*_*sjå 5

正如您在下面引用的文本中所看到的,Roslyn删除了对具有无参数构造函数的结构的支持,因此它在VB 14中列为新功能.

长期以来一直要求C#和VB结构构造函数始终具有参数.我们试图在C#6.0中放宽这些要求,使结构与类更加一致.

虽然结构中的整体无参数构造函数从IL角度来看是有效的,但没有方便的方法来声明它们,它们实际上是不存在的.随着我们执行越来越多的测试,我们不断发现无参数构造函数在库中甚至在某些版本的CLR中导致不一致行为的情况.

一个很好的例子是CodePlex错误http://roslyn.codeplex.com/workitem/465中报告的问题.这个问题基本上是围绕CLR 4.0在Activator.CreateInstance中引入的一个优化,从那以后就出现了.优化假设如果发现T是结构,则通用T类型的无参数实例化不会引起副作用,因此可以缓存实例.无参数结构构造函数会违反这些假设并使优化可观察,因此需要为现有代码提供多个版本的服务.

在重新考虑破坏长期假设所引起的潜在问题之后,我们认为最好让我们的用户恢复结构构造函数的要求,使其始终具有形式参数.


来源:恢复结构构造函数的要求始终具有形式参数.#1029