它在C#方面意味着什么?

Qué*_*dre 1 .net c# decompiler dotpeek

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

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

我想知道它意味着什么?如何在C#中重写它?特别是这部分:

<MS::Internal::Text::TextInterface::Native::IDWriteNumberSubstitution *>
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 7

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

它在PresentationCore,System.Data中得到了很多用处,它包含了大量的本机代码互操作,以利用现有的Microsoft apis.在这种情况下,它是DirectWrite,一个文本呈现api.它是一个相当复杂的原生api,远远超出了标准pinvoke的互操作能力.C++/CLI支持直接使用本机COM样式的接口.

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

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