Cały kod napisany w językach .NET kompiluje się do MSIL, ale czy istnieją określone zadania / operacje, które można wykonać tylko bezpośrednio przy użyciu MSIL?
Zróbmy też rzeczy łatwiejsze w MSIL niż C #, VB.NET, F #, j # czy jakikolwiek inny język .NET.
Jak dotąd mamy to:
- Rekursja ogona
- Ogólna współ / kontrawariancja
- Przeciążenia, które różnią się tylko typami zwracanymi
- Zastąp modyfikatory dostępu
- Mieć klasę, która nie może dziedziczyć po System.Object
- Filtrowane wyjątki (można to zrobić w vb.net)
- Wywołanie metody wirtualnej bieżącego typu klasy statycznej.
- Zapoznaj się z pudełkową wersją typu wartości.
- Spróbuj / błąd.
- Używanie zabronionych nazw.
- Zdefiniuj własne konstruktory bez parametrów dla typów wartości .
- Zdefiniuj zdarzenia za pomocą
raise
elementu. - Niektóre konwersje dozwolone przez środowisko CLR, ale nie przez C #.
- Utwórz
main()
metodę inną niż.entrypoint
. - pracować bezpośrednio z typami natywnymi
int
i natywnymiunsigned int
. - Graj z przejściowymi wskaźnikami
- emitbyte w MethodBodyItem
- Wyrzuć i złap typy inne niż System.Exception
- Dziedzicz wyliczenia (niezweryfikowane)
- Tablicę bajtów można traktować jako (4x mniejszą) tablicę liczb całkowitych.
- Możesz mieć wszystkie pola / metody / właściwości / zdarzenia o tej samej nazwie (niezweryfikowane).
- Możesz rozgałęzić się z powrotem do bloku try z własnego bloku catch.
- Masz dostęp do specyfikatora dostępu famandassem (
protected internal
to fam lub assem) - Bezpośredni dostęp do
<Module>
klasy w celu zdefiniowania funkcji globalnych lub inicjatora modułu.