Как понять, что имя класса добавляет символ ‹›?

Как понять этот код на C#?

using System;
internal class <Module>
{
}

Имя класса не может содержать символ <>, но разрешено ли его наличие в коде? Как бы вы этого добились? И как понять эту разницу?

Взгляните на этот код:

internal class <Module>{D8BAC701-C957-4CBE-8F97-37BB3A7DAFFE}
{
    static <Module>{D8BAC701-C957-4CBE-8F97-37BB3A7DAFFE}()
    {
        if (!(eqXmHMg8VVPy3nYeAo.eHiMp4DL8(Convert.ToBase64String(Type.GetTypeFromHandle(epOl6XynGueNUNwY5Y.e53w34m968awCm9P85taUZe(33554477)).Assembly.GetName().GetPublicKeyToken()), "eObc8gibn") != "34NavQ/3DsKjaKpYVSNSMjtuaXO9zUZlQl7AY+p3wrM="))
        {
            return;
        }
        while (true)
        {
            eqXmHMg8VVPy3nYeAo.ce4DmfsmSrOT856tDgfrkMb();
        }
    }
}

У этого класса даже нет пространства имен.

Я декомпилировал эту DLL с помощью ILSpy. Но как я могу использовать этот код и расшифровать его?


c# il
person Dolphin    schedule 27.10.2013    source источник
comment
Я думаю, что здесь вам не хватает имени класса и упоминается только общий тип. это должно быть что-то вроде этого, внутренний класс MyClass‹GenericType›{}. Дополнительные сведения: msdn.microsoft.com/ en-us/library/sz6zd40f%28v=vs.110%29.aspx   -  person Md. Ashaduzzaman    schedule 27.10.2013
comment
Я не знаю, откуда взялся этот код, но он выглядит как декомпилированный код. Вам не разрешено писать такой код, но это делает компилятор. Компилятор часто использует непроизносимые имена, чтобы предотвратить конфликты имен с вашим кодом.   -  person Knickedi    schedule 27.10.2013
comment
@Knickedi Вам не разрешено писать такой код на C#. Но вы могли бы написать это, если бы писали IL напрямую.   -  person svick    schedule 27.10.2013
comment
@svick Ты абсолютно прав. Я должен был быть более точным вместо того, чтобы подразумевать знание. (Вопрос был Как понять этот код на C#? и это недопустимый код C#.)   -  person Knickedi    schedule 27.10.2013


Ответы (1)


Похоже, это мог быть запутанный код. Это код, скомпилированный в IL таким образом, что он все еще действителен, но не может быть легко понят людьми.

Это работает, потому что правила для действительных идентификаторов в C# и IL различаются. Итак, когда вы пытаетесь декомпилировать код, вы получаете недействительный C#, но сам IL действителен.

Кроме того, классы не обязательно должны находиться в пространствах имен, даже в C#.

person svick    schedule 27.10.2013
comment
Спасибо, я постараюсь понять это. У вас есть какие-либо свойства/хорошее предложение? - person Dolphin; 28.10.2013