Я попытался поэкспериментировать со способностью .NET поддерживать объединения, используя приведенный ниже код, но это вызывает исключение System.ExecutionengineException в .NET 2.0 и FatalExecutionEngineError в .NET 4.0 с сообщением:
Во время выполнения произошла фатальная ошибка.Адрес ошибки был 0x738b3138, в потоке 0x1080.Код ошибки 0xc0000005.Эта ошибка может быть ошибкой в CLR или в небезопасных или не поддающихся проверке частях пользовательского кода.Распространенными источниками этой ошибки являются ошибки пользовательского маршалинга для COM-взаимодействия или PInvoke, которые могут повредить стек.
Я согласен, что этот код не должен работать, но я не ожидал такого исключения,Это ошибка .NET?
Class POLine
Public price As Decimal
Public VendorItem As String
End Class
Class SOLine
Public price As Decimal
Public Required As DateTime
End Class
<System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Explicit)> _
Structure LineRef
<System.Runtime.InteropServices.FieldOffset(0)> _
Public poLine As POLine
<System.Runtime.InteropServices.FieldOffset(0)> _
Public soLine As SOLine
End Structure
Sub Main()
Dim lr As New LineRef
lr.poLine = New POLine With {.price = 1.23D, .VendorItem = "X22"}
lr.soLine = New SOLine With {.price = 3.14D, .Required = DateTime.Now}
Console.WriteLine("{0} {1}", lr.soLine.price, lr.soLine.Required)
Console.WriteLine("{0} {1}", lr.poLine.price, lr.poLine.VendorItem)
End Sub