13

我刚刚安装了来自 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)或自编译后源是否已更改?

4

2 回答 2

8

不; 那是无效的。

在发布源代码之前,微软通过一个编写不佳的内部工具运行它,该工具将所有员工姓名替换为[....].
不幸的是,该工具也取代了实际来源。

这实际上适得其反;通过查看已编译的元数据(例如,在 Reflector 中),您可以找出大部分隐藏的源代码实际上是什么。

您的特定行应该是private bool _sync

于 2012-12-20T15:13:40.027 回答
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    
    }
   }
于 2012-12-20T15:41:23.093 回答