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".
我还没有看到任何说明在发布之前被拉掉的地方.
我误解了这个新功能的作用吗?
正如您在下面引用的文本中所看到的,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
归档时间: |
|
查看次数: |
2018 次 |
最近记录: |