`_ [....]`是有效的标识符吗?

时间:2012-12-20 15:09:07

标签: c# asp.net .net-4.5 httpapplication

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

2 个答案:

答案 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    
    }
   }