Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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ć Reflection Emit do definiowania metod globalnych i definiowania metod jako członków typu. API definiujące metody zwracają MethodBuilder obiekty.
Metody globalne
Metoda globalna jest definiowana za pomocą metody ModuleBuilder.DefineGlobalMethod, która zwraca obiekt MethodBuilder.
Metody globalne muszą być statyczne. Jeśli moduł dynamiczny zawiera metody globalne, należy wywołać metodę ModuleBuilder.CreateGlobalFunctions przed utrwaleniem modułu dynamicznego lub zestawu dynamicznego zawierającego ten moduł, ponieważ środowisko uruchomieniowe języka wspólnego odkłada naprawianie modułu dynamicznego do momentu zdefiniowania wszystkich funkcji globalnych.
Globalna metoda natywna jest definiowana przy użyciu metody ModuleBuilder.DefinePInvokeMethod. Metody wywołania platformy (PInvoke) nie mogą być deklarowane jako abstrakcyjne ani wirtualne. Środowisko uruchomieniowe ustawia MethodAttributes.PinvokeImpl atrybut dla metody wywołującej platformę.
Metody jako członkowie 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
Składowe wyliczenia MethodAttributes definiują dokładny charakter 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 rzucają NotSupportedException. Na przykład MethodBuilder.Invoke metoda nie jest w pełni zaimplementowana. Te metody można rozważyć, pobierając typ otaczający przy użyciu metod Type.GetType lub Assembly.GetType.
- Modyfikatory niestandardowe są obsługiwane.