1 回答

TA貢獻1831條經驗 獲得超9個贊
有問題的代碼不是有效的 C# 代碼,而且最初可能不是用 C# 編寫的。您看到的是 ILSpy 的底層代碼的 C# 表示 - C# 語法能夠表示這一點,因為它只是一個編譯器規則,表明您無法獲得指向托管類型的指針。
我的猜測(我不知道這個事實)有問題的代碼首先是用 IL 編寫的——如果你將它反編譯為 IL,你可以看到它是微不足道的:
.method public hidebysig static
void* AsPointer<T> (
!!T& 'value'
) cil managed flag(0100)
{
.custom instance void
System.Runtime.Versioning.NonVersionableAttribute::.ctor() = (
01 00 00 00
)
// Method begins at RVA 0x2190
// Code size 3 (0x3)
.maxstack 1
IL_0000: ldarg.0
IL_0001: conv.u
IL_0002: ret
} // end of method Unsafe::AsPointer
(這是來自 System.Runtime.CompilerServices.Unsafe.dll。)
托管實例被加載到堆棧上,然后它只是作為無符號指針值返回。
如果您想重新創建此行為,您可以 - 只需在 IL 中編寫您的 DLL 并編譯它,然后從支持指針的任何其他 .NET 語言中引用它。
- 1 回答
- 0 關注
- 429 瀏覽
添加回答
舉報