Вы нашли это обратно в PresentationCore.dll. Вы смотрите на код, написанный на C++/CLI, а не на C#. Это один из трех основных языков Microsoft .NET, помимо C# и VB.NET. Определенно, уродливая ступенька дочери, причина C++/CLI для существования - это ее непревзойденная способность взаимодействовать с нативным кодом, написанным на C или C++.
Это очень полезно использовать в PresentationCore, System.Data, а также содержит сложный встроенный код для использования существующей Microsoft apis. В этом случае это DirectWrite, текстовый рендеринг api. Это довольно сложный native api, который превосходит возможности стандартного pinvoke для взаимодействия. C++/CLI поддерживает непосредственно встроенные интерфейсы COM-стиля.
Одним из аспектов C++/CLI является то, что интерфейсы и классы на C++ могут проникать в метаданные сборки. Это немного недостаток, у него нет отличного способа подавить видимость родных типов. Только наоборот, делая их видимыми с #pragma make_public
. Компилятор C++/CLI должен генерировать определение метаданных для типа, совместимого с метаданными сборки. Так как это родные типы под капотом, ближайший разумный совпадение - это значение типа. Он полностью непрозрачен, вы не видите членов этого типа. Просто blob, довольно похожий на тип буфера фиксированного размера в C#.
Так что это всего лишь артефакт. В C# нет разумного способа сделать то же самое, и нет причин для этого.
IDWriteNumberSubstitution us COM-интерфейс. Остальное название звучит просто как искусственный квалификатор –
Этот код уже в C# –
Что здесь означают угловые скобки и значки звезд? –