Является ли `_ [....]` действительным идентификатором?
Я только что установил исходный источник .NET 4.5 от Microsoft, поскольку я пытаюсь отладить проблему, которую я вижу, и я наткнулся на следующее в 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), или источник был изменен после компиляции?
Ответы
Ответ 1
Нет; это недействительно.
Перед выпуском источника Microsoft провела его с помощью плохо написанного внутреннего инструмента, который заменяет все имена сотрудников [....]
.
К сожалению, инструмент также заменяет реальный источник.
Это действительно контрпродуктивно; вы можете узнать, что большинство скрытого источника на самом деле было, просмотрев скомпилированные метаданные (например, в Reflector).
Ваша конкретная строка должна быть private bool _sync
Ответ 2
В то время как ответ @SLaks, скорее всего, правильный, важно отметить, что это потенциально допустимый идентификатор на уровне IL, ECMA 335 Partition II, раздел 5.3:
[T]. Синтаксис ILAsm позволяет использовать любой идентификатор, который может быть сформирован с использованием набора символов Unicode (см. раздел I). Для этого идентификатор должен быть помещен в одинарные кавычки.
Вполне допустимый IL, который выводит False на консоль:
.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
}
}