我最近不得不在他们离开时反编译一个同事的代码,并发现它的大部分看起来都非常好(感谢ILSpy),但有一个明显的例外。我们需要使用dynamic
的几个地方 - 这些地方被分成几个部分:
dynamic
的方法是DoStuff
,会有public /* static? I forget */ class <DoStuff>CallSiteContainer_Plus_Some_Weirdness { /* bunch of CallSite fields */ }
的声明。 {1}} 我的问题是关于第1点中类声明的语法。它看起来像一个普通的类,但它显然不是。任何人都可以解释那里发生了什么吗?
请注意,我没有在编写原始代码时寻求帮助 - 我已经设法通过明智地使用查找和替换以及从其他所有内容中分解自动生成的代码来实现这一点。但我想了解CallSite容器语法是一个有效的类名!
答案 0 :(得分:3)
以下是此类自动生成类的示例:
private static class <>o__0
{
public static CallSite<Action<CallSite, Type, object>> <>p__0;
}
如果您担心<>o__0
类名称和<>p__0
字段名称,那么您是对的,那些不是有效的C#名称,但这并不意味着它们不是有效的IL名称这是编译器生成的内容。它使用这些特殊符号的原因是为了确保它们永远不会与您作为开发人员可能编写的类名冲突。