【发布时间】:2013-09-21 06:09:01
【问题描述】:
我们必须与本机代码进行很多互操作,在这种情况下,使用不需要封送处理的不安全结构要快得多。但是,当结构包含非原始类型的固定大小缓冲区时,我们不能这样做。 为什么 C# 编译器要求固定大小的缓冲区仅属于基本类型?为什么固定大小的缓冲区不能由如下结构组成:
[StructLayout(LayoutKind.Sequential)]
struct SomeType
{
int Number1;
int Number2;
}
【问题讨论】:
-
我将使用“增加编译器的复杂性”。编译器必须检查没有 .NET 特定功能应用于应用于可枚举项的结构。例如,泛型、接口实现,甚至非原始数组的更深层次的属性等等。毫无疑问,运行时也会有一些与这类事情的互操作问题。
-
但这已经由编译器完成了。如果您尝试创建一个指向包含任何这些内容的结构的指针,则会出现编译器错误:msdn.microsoft.com/en-us/library/x2estayf(v=vs.90).aspx
-
看来我完全误解了你的意思。
-
@Mehrdad 这有点阴谋论,你不觉得吗?