Декомпилированная сборка.NET имеет '&' после ошибки типа
Я унаследовал несколько сборок, которые, насколько мне известно, были созданы с использованием Visual Studio 2005, .NET Framework 1.1(?) И VB.NET. К сожалению, исходный код больше не доступен для меня. В результате я использовал dotPeek для декомпиляции сборок (как C#) и попыток реверс-инжиниринга проектов. Полученный исходный код имеет несколько строк, которые выглядят примерно так:
// ISSUE: explicit reference operation
// ISSUE: variable of a reference type
string& szDataDescr = @str;
"Строка &" для меня чужда (и Visual Studio тоже явно). Visual Studio 2015 не распознает это как допустимое, и я получаю ошибки компиляции. Является ли '&' чем-то, что добавлено dotPeek, или это какая-то устаревшая конструкция.NET, которая была верна тогда? Подобный комментарий появляется везде, где используется шаблон 'type&', поэтому я предполагаю, что он связан.
1 ответ
Знак & после имени типа указывает, что это ссылочный тип, а знак @ перед именем переменной создает ссылку на эту переменную.
Если вы попытаетесь скомпилировать код, вы получите ошибку, потому что компилятор обрабатывает & как побитовое и, и будет жаловаться, что вы использовали тип, как если бы он был переменной. Но это нормально, потому что вы не получили его из исходного файла C#.
Лучшее решение - использовать другой декомпилятор.
- ILSpy: http://ilspy.net/
- .Net Code Reflect: http://www.devextras.com/decompiler/
- .Net Reflector: http://www.red-gate.com/products/dotnet-development/reflector/
Проверьте здесь для получения дополнительной информации о том, что & делает в IL.