System. Emocje ion. Emit.MethodBuilder, klasa
Ten artykuł zawiera dodatkowe uwagi dotyczące dokumentacji referencyjnej dla tego interfejsu API.
Klasa MethodBuilder służy do pełnego opisywania metody w typowym języku pośrednim (CIL), w tym nazwy, atrybutów, podpisu i treści metody. Jest on używany w połączeniu z klasą TypeBuilder do tworzenia klas w czasie wykonywania.
Możesz użyć emisji odbicia, aby zdefiniować metody globalne i zdefiniować metody jako elementy członkowskie typu. Interfejsy API definiujące metody zwracają MethodBuilder obiekty.
Metody globalne
Metoda globalna jest definiowana ModuleBuilder.DefineGlobalMethod przy użyciu metody , która zwraca MethodBuilder
obiekt.
Metody globalne muszą być statyczne. Jeśli moduł dynamiczny zawiera metody globalne, należy wywołać metodę przed utrwaleniem modułu dynamicznego lub zawierającego zestaw dynamiczny, ModuleBuilder.CreateGlobalFunctions ponieważ środowisko uruchomieniowe języka wspólnego odkłada naprawianie modułu dynamicznego do czasu zdefiniowania wszystkich funkcji globalnych.
Globalna metoda natywna jest definiowana ModuleBuilder.DefinePInvokeMethod przy użyciu metody . Metody wywołania platformy (PInvoke) nie mogą być deklarowane jako abstrakcyjne ani wirtualne. Środowisko uruchomieniowe ustawia MethodAttributes.PinvokeImpl atrybut dla metody wywołania platformy.
Metody jako elementy członkowskie typów
Metoda jest definiowana jako element członkowski typu przy użyciu TypeBuilder.DefineMethod metody , która zwraca MethodBuilder obiekt.
Metoda DefineParameter służy do ustawiania atrybutów nazwy i parametru parametru lub wartości zwracanej. ParameterBuilder Obiekt zwrócony przez tę metodę reprezentuje parametr lub wartość zwracaną. Obiekt ParameterBuilder może służyć do ustawiania marshalingu, ustawiania stałej wartości i stosowania atrybutów niestandardowych.
Atrybuty
MethodAttributes Składowe wyliczenia definiują dokładny znak metody dynamicznej:
- Metody statyczne są określane przy użyciu atrybutu MethodAttributes.Static .
- Ostateczne metody (metody, których nie można zastąpić) są określane przy użyciu atrybutu MethodAttributes.Final .
- Metody wirtualne są określane przy użyciu atrybutu MethodAttributes.Virtual .
- Metody abstrakcyjne są określane przy użyciu atrybutu MethodAttributes.Abstract .
- Kilka atrybutów określa widoczność metody. Zobacz opis MethodAttributes wyliczenia.
- Metody implementujące przeciążone operatory muszą ustawić MethodAttributes.SpecialName atrybut.
- Finalizatory muszą ustawić MethodAttributes.SpecialName atrybut.
Znane problemy
- Chociaż MethodBuilder pochodzi z MethodInfoklasy , niektóre metody abstrakcyjne zdefiniowane w MethodInfo klasie nie są w pełni zaimplementowane w pliku MethodBuilder. Te MethodBuilder metody zgłaszają element NotSupportedException. Na przykład MethodBuilder.Invoke metoda nie jest w pełni zaimplementowana. Te metody można odzwierciedlić, pobierając otaczający typ przy użyciu Type.GetType metod lub Assembly.GetType .
- Modyfikatory niestandardowe są obsługiwane.