我刚刚安装了Microsoft的.NET 4.5参考源,因为我正在尝试调试我正在看到的问题,我偶然发现了HttpApplication.cs
中的以下内容。
// execution step -- call asynchronous event
internal class AsyncEventExecutionStep : IExecutionStep {
private HttpApplication _application;
private BeginEventHandler _beginHandler;
private EndEventHandler _endHandler;
private Object _state;
private AsyncCallback _completionCallback;
private AsyncStepCompletionInfo _asyncStepCompletionInfo; // per call
private bool _[....]; // per call
private string _targetTypeStr;
注意倒数第二行private bool _[....]; // per call
。
_[....]
是否是有效的标识符(在任何编译级别,包括IL)或者自编译以来源是否已更改?
答案 0 :(得分:8)
没有;那是无效的。
在发布源代码之前,Microsoft通过编写得很糟糕的内部工具运行它,该工具用[....]
替换所有员工姓名。
不幸的是,该工具也取代了实际的来源。
这实际上适得其反;您可以通过查看已编译的元数据(例如,在Reflector中)找出大多数隐藏源实际上是什么。
您的特定行应为private bool _sync
答案 1 :(得分:3)
虽然@SLaks答案很可能是正确答案,但重要的是要注意这是IL级别的潜在有效标识符,ECMA 335 Partition II,第5.3节规定:
[T]他的ILAsm语法允许使用可以使用Unicode字符集形成的任何标识符(请参阅分区I)。为实现此目的,标识符应放在单引号内。
以下是在控制台上打印出False的完全有效的IL:
.assembly 'ValidIDTest'
{
}
.class public TestClass
{
.field static public bool '_[...]'
.method static void Main() cil managed
{
.entrypoint
ldsfld bool TestClass::'_[...]'
call void [mscorlib]System.Console::WriteLine(bool)
ret
}
}