Весь код, написанный на языках .NET, компилируется в MSIL, но есть ли конкретные задачи / операции, которые вы можете выполнять только с использованием MSIL напрямую?
Позвольте нам также сделать вещи проще в MSIL, чем C #, VB.NET, F #, j # или любой другой язык .NET.
Пока у нас есть это:
- Хвостовая рекурсия
- Общий Co / Contravariance
- Перегрузки, которые отличаются только типами возврата
- Переопределить модификаторы доступа
- Есть класс, который не может наследоваться от System.Object
- Отфильтрованные исключения (может быть сделано в vb.net)
- Вызов виртуального метода текущего типа статического класса.
- Получить дескриптор в штучной упаковке версии типа значения.
- Сделайте попытку / ошибку.
- Использование запрещенных имен.
- Определите свои собственные конструкторы без параметров для типов значений .
- Определите события с
raise
элементом. - Некоторые преобразования разрешены CLR, но не C #.
- Сделайте не
main()
метод как.entrypoint
. - работать с нативным
int
и нативнымunsigned int
типами напрямую. - Играть с переходными указателями
- директива emitbyte в MethodBodyItem
- Бросать и ловить не System.Exception типы
- Inherit Enums (не проверено)
- Вы можете рассматривать массив байтов как (в 4 раза меньший) массив целых.
- У вас может быть поле / метод / свойство / событие, все они имеют одно и то же имя (не проверено).
- Вы можете перейти обратно в блок try из своего собственного блока catch.
- У вас есть доступ к спецификатору доступа famandassem (
protected internal
является fam или сборкой) - Прямой доступ к
<Module>
классу для определения глобальных функций или инициализатора модуля.