Type.GetMethods Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Ottiene i metodi dell'oggetto Type corrente.
Overload
| GetMethods(BindingFlags) |
Quando ne viene eseguito l'override in una classe derivata, cerca i metodi definiti per l'oggetto Type corrente, usando i vincoli di binding specificati. |
| GetMethods() |
Restituisce tutti i metodi pubblici dell'oggetto Type corrente. |
GetMethods(BindingFlags)
- Origine:
- Type.cs
- Origine:
- Type.cs
- Origine:
- Type.cs
- Origine:
- Type.cs
Quando ne viene eseguito l'override in una classe derivata, cerca i metodi definiti per l'oggetto Type corrente, usando i vincoli di binding specificati.
public:
abstract cli::array <System::Reflection::MethodInfo ^> ^ GetMethods(System::Reflection::BindingFlags bindingAttr);
public abstract System.Reflection.MethodInfo[] GetMethods(System.Reflection.BindingFlags bindingAttr);
abstract member GetMethods : System.Reflection.BindingFlags -> System.Reflection.MethodInfo[]
Public MustOverride Function GetMethods (bindingAttr As BindingFlags) As MethodInfo()
Parametri
- bindingAttr
- BindingFlags
Combinazione bit per bit di valori di enumerazione che specifica il modo in cui viene eseguita la ricerca.
-oppure-
Default per restituire una matrice vuota.
Restituisce
Matrice di oggetti MethodInfo che rappresentano tutti i metodi definiti per l'oggetto Type corrente, corrispondente ai vincoli di binding specificati.
-oppure-
Matrice vuota di tipo MethodInfo, se non è definito alcun metodo per l'oggetto Type corrente oppure se nessuno dei metodi definiti corrisponde ai vincoli di binding.
Implementazioni
Esempio
L'esempio seguente crea una classe con due metodi pubblici e un metodo protetto, crea un Type oggetto corrispondente a MyTypeClass, ottiene tutti i metodi pubblici e non pubblici e ne visualizza i nomi.
using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
// Create a class having two public methods and one protected method.
public ref class MyTypeClass
{
public:
void MyMethods(){}
int MyMethods1()
{
return 3;
}
protected:
String^ MyMethods2()
{
return "hello";
}
};
void DisplayMethodInfo( array<MethodInfo^>^myArrayMethodInfo )
{
// Display information for all methods.
for ( int i = 0; i < myArrayMethodInfo->Length; i++ )
{
MethodInfo^ myMethodInfo = dynamic_cast<MethodInfo^>(myArrayMethodInfo[ i ]);
Console::WriteLine( "\nThe name of the method is {0}.", myMethodInfo->Name );
}
}
int main()
{
Type^ myType = MyTypeClass::typeid;
// Get the public methods.
array<MethodInfo^>^myArrayMethodInfo = myType->GetMethods( static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance | BindingFlags::DeclaredOnly) );
Console::WriteLine( "\nThe number of public methods is {0}->", myArrayMethodInfo->Length );
// Display all the methods.
DisplayMethodInfo( myArrayMethodInfo );
// Get the nonpublic methods.
array<MethodInfo^>^myArrayMethodInfo1 = myType->GetMethods( static_cast<BindingFlags>(BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::DeclaredOnly) );
Console::WriteLine( "\nThe number of protected methods is {0}->", myArrayMethodInfo1->Length );
// Display information for all methods.
DisplayMethodInfo( myArrayMethodInfo1 );
}
using System;
using System.Reflection;
using System.Reflection.Emit;
// Create a class having two public methods and one protected method.
public class MyTypeClass
{
public void MyMethods()
{
}
public int MyMethods1()
{
return 3;
}
protected String MyMethods2()
{
return "hello";
}
}
public class TypeMain
{
public static void Main()
{
Type myType =(typeof(MyTypeClass));
// Get the public methods.
MethodInfo[] myArrayMethodInfo = myType.GetMethods(BindingFlags.Public|BindingFlags.Instance|BindingFlags.DeclaredOnly);
Console.WriteLine("\nThe number of public methods is {0}.", myArrayMethodInfo.Length);
// Display all the methods.
DisplayMethodInfo(myArrayMethodInfo);
// Get the nonpublic methods.
MethodInfo[] myArrayMethodInfo1 = myType.GetMethods(BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.DeclaredOnly);
Console.WriteLine("\nThe number of protected methods is {0}.", myArrayMethodInfo1.Length);
// Display information for all methods.
DisplayMethodInfo(myArrayMethodInfo1);
}
public static void DisplayMethodInfo(MethodInfo[] myArrayMethodInfo)
{
// Display information for all methods.
for(int i=0;i<myArrayMethodInfo.Length;i++)
{
MethodInfo myMethodInfo = (MethodInfo)myArrayMethodInfo[i];
Console.WriteLine("\nThe name of the method is {0}.", myMethodInfo.Name);
}
}
}
Imports System.Reflection
Imports System.Reflection.Emit
' Create a class having two public methods and one protected method.
Public Class MyTypeClass
Public Sub MyMethods()
End Sub
Public Function MyMethods1() As Integer
Return 3
End Function 'MyMethods1
Protected Function MyMethods2() As [String]
Return "hello"
End Function 'MyMethods2
End Class
Public Class TypeMain
Public Shared Sub Main()
Dim myType As Type = GetType(MyTypeClass)
' Get the public methods.
Dim myArrayMethodInfo As MethodInfo() = myType.GetMethods((BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.DeclaredOnly))
Console.WriteLine((ControlChars.Cr + "The number of public methods is " & myArrayMethodInfo.Length.ToString() & "."))
' Display all the public methods.
DisplayMethodInfo(myArrayMethodInfo)
' Get the nonpublic methods.
Dim myArrayMethodInfo1 As MethodInfo() = myType.GetMethods((BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.DeclaredOnly))
Console.WriteLine((ControlChars.Cr + "The number of protected methods is " & myArrayMethodInfo1.Length.ToString() & "."))
' Display all the nonpublic methods.
DisplayMethodInfo(myArrayMethodInfo1)
End Sub
Public Shared Sub DisplayMethodInfo(ByVal myArrayMethodInfo() As MethodInfo)
' Display information for all methods.
Dim i As Integer
For i = 0 To myArrayMethodInfo.Length - 1
Dim myMethodInfo As MethodInfo = CType(myArrayMethodInfo(i), MethodInfo)
Console.WriteLine((ControlChars.Cr + "The name of the method is " & myMethodInfo.Name & "."))
Next i
End Sub
End Class
Commenti
Affinché l'overload recuperi correttamente le informazioni sul GetMethods(BindingFlags) metodo, l'argomento bindingAttr deve includere almeno uno di BindingFlags.Instance e BindingFlags.Static, insieme ad almeno uno di BindingFlags.NonPublic e BindingFlags.Public.
È possibile usare i flag di filtro seguenti BindingFlags per definire i metodi da includere nella ricerca:
Specificare
BindingFlags.Instanceper includere i metodi di istanza.Specificare
BindingFlags.Staticper includere metodi statici.Specificare
BindingFlags.Publicper includere i metodi pubblici nella ricerca.Specificare
BindingFlags.NonPublicdi includere metodi non pubblici (ovvero metodi privati, interni e protetti) nella ricerca. Vengono restituiti solo i metodi protetti e interni nelle classi di base; i metodi privati sulle classi di base non vengono restituiti.Specificare
BindingFlags.FlattenHierarchydi includerepubliceprotectedmembri statici fino alla gerarchia.privateI membri statici nelle classi ereditate non sono inclusi.Specificare
BindingFlags.Defaultda solo per restituire una matrice vuota MethodInfo .
Per modificare il funzionamento della ricerca, è possibile usare i flag di modificatore seguenti BindingFlags :
-
BindingFlags.DeclaredOnlyper cercare solo i metodi dichiarati in Type, non i metodi semplicemente ereditati.
Per altre informazioni, vedere System.Reflection.BindingFlags.
In .NET 6 e versioni precedenti, il GetMethods metodo non restituisce metodi in un ordine specifico, ad esempio ordine alfabetico o di dichiarazione. Il codice non deve dipendere dall'ordine in cui vengono restituiti i metodi, perché tale ordine varia. Tuttavia, a partire da .NET 7, l'ordinamento è deterministico in base all'ordinamento dei metadati nell'assembly.
Se l'oggetto corrente Type rappresenta un tipo generico costruito, questo metodo restituisce gli MethodInfo oggetti con i parametri di tipo sostituiti dagli argomenti di tipo appropriati.
Se l'oggetto corrente Type rappresenta un parametro di tipo nella definizione di un tipo generico o di un metodo generico, questo metodo cerca i metodi del vincolo di classe o i metodi di se non è presente alcun vincolo di Object classe.
Vedi anche
- MethodInfo
- BindingFlags
- DefaultBinder
- GetMethod(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])
Si applica a
GetMethods()
- Origine:
- Type.cs
- Origine:
- Type.cs
- Origine:
- Type.cs
- Origine:
- Type.cs
Restituisce tutti i metodi pubblici dell'oggetto Type corrente.
public:
cli::array <System::Reflection::MethodInfo ^> ^ GetMethods();
public:
virtual cli::array <System::Reflection::MethodInfo ^> ^ GetMethods();
public System.Reflection.MethodInfo[] GetMethods();
member this.GetMethods : unit -> System.Reflection.MethodInfo[]
abstract member GetMethods : unit -> System.Reflection.MethodInfo[]
override this.GetMethods : unit -> System.Reflection.MethodInfo[]
Public Function GetMethods () As MethodInfo()
Restituisce
Matrice di oggetti MethodInfo che rappresentano tutti i metodi pubblici definiti per l'oggetto Type corrente.
-oppure-
Matrice vuota di tipo MethodInfo, se non sono definiti metodi pubblici per l'oggetto Type corrente.
Implementazioni
Commenti
In .NET 6 e versioni precedenti, il GetMethods metodo non restituisce metodi in un ordine specifico, ad esempio ordine alfabetico o di dichiarazione. Il codice non deve dipendere dall'ordine in cui vengono restituiti i metodi, perché tale ordine varia. Tuttavia, a partire da .NET 7, l'ordinamento è deterministico in base all'ordinamento dei metadati nell'assembly.
I costruttori non sono inclusi nella matrice di metodi restituiti da questa chiamata. Effettuare una chiamata separata a per GetConstructors() ottenere i metodi del costruttore.
Nella tabella seguente vengono illustrati i membri di una classe base restituiti dai Get metodi quando si riflette su un tipo.
| Tipo di membro | Static | Non statico |
|---|---|---|
| Costruttore | No | No |
| Campo | No | Sì. Un campo è sempre hide-by-name-and-signature. |
| Evento | Non applicabile | La regola di sistema dei tipi comune è che l'ereditarietà è uguale a quella dei metodi che implementano la proprietà . La reflection considera le proprietà come hide-by-name-and-signature. Vedere la nota 2 di seguito. |
| Metodo | No | Sì. Un metodo (sia virtuale che non virtuale) può essere hide-by-name o hide-by-name-and-signature. |
| Tipo annidato | No | No |
| Proprietà | Non applicabile | La regola di sistema dei tipi comune è che l'ereditarietà è uguale a quella dei metodi che implementano la proprietà . La reflection considera le proprietà come hide-by-name-and-signature. Vedere la nota 2 di seguito. |
Hide-by-name-and-signature considera tutte le parti della firma, inclusi modificatori personalizzati, tipi restituiti, tipi di parametro, sentinel e convenzioni di chiamata non gestite. Si tratta di un confronto binario.
Per la reflection, le proprietà e gli eventi sono hide-by-name-and-signature. Se nella classe base è presente una proprietà con una funzione di accesso get e una funzione di accesso set, ma la classe derivata ha solo una funzione di accesso get, la proprietà della classe derivata nasconde la proprietà della classe base e non sarà possibile accedere al setter nella classe base.
Gli attributi personalizzati non fanno parte del sistema di tipi comuni.
Nota
Non è possibile omettere parametri durante la ricerca di costruttori e metodi. È possibile omettere i parametri solo quando si richiama.
Se l'oggetto corrente Type rappresenta un tipo generico costruito, questo metodo restituisce gli MethodInfo oggetti con i parametri di tipo sostituiti dagli argomenti di tipo appropriati.
Se l'oggetto corrente Type rappresenta un parametro di tipo nella definizione di un tipo generico o di un metodo generico, questo metodo cerca i metodi del vincolo di classe o i metodi di se non è presente alcun vincolo di Object classe.