gpt4 book ai didi

c# - 就 C# 而言,这意味着什么?

转载 作者:太空宇宙 更新时间:2023-11-03 18:32:10 25 4
gpt4 key购买 nike

我发现以下编译器生成的代码使用 DotPeek 分析一个 .NET 程序集:

[UnsafeValueType, NativeCppClass]
[StructLayout(LayoutKind.Sequential, Size = 16)]
internal struct DWriteTextAnalysisNode<MS::Internal::Text::TextInterface::Native::IDWriteNumberSubstitution *>
{
}

请问这是什么意思?如何在 C# 中重写它?特别是这部分:

<MS::Internal::Text::TextInterface::Native::IDWriteNumberSubstitution *>

最佳答案

您在 PresentationCore.dll 中找到了它。您正在查看用 C++/CLI 而不是 C# 编写的代码。它是除 C# 和 VB.NET 之外的三大 Microsoft .NET 语言之一。绝对是丑陋的继女,C++/CLI 存在的原因是它与用 C 或 C++ 编写的 native 代码互操作的无与伦比的能力。

它在 PresentationCore 和 System.Data 中得到大量使用,它包含大量 native 代码互操作以利用现有的 Microsoft api。在本例中为 DirectWrite ,一个文本渲染 api。这是一个非常复杂的 native api,远远超出了标准 pinvoke 与之互操作的能力。 C++/CLI 支持直接使用本地 COM 风格的接口(interface)。

C++/CLI 的一个方面是 native C++ 接口(interface)和类可以渗入程序集元数据。这有点缺陷,它没有很好的方法来抑制 native 类型的可见性。恰恰相反,使用 #pragma make_public 使它们可见。 C++/CLI 编译器必须为与程序集元数据兼容的类型生成元数据定义。由于这些是引擎盖下的 native 类型,因此最接近的合理匹配是值类型。它是完全不透明的,您看不到该类型的成员。只是一个 blob,非常类似于 C# 中的固定大小缓冲区类型。

所以这只是一个神器。在 C# 中做同样的事情没有明智的方法,也没有理由这样做。

关于c# - 就 C# 而言,这意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20757323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com