Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка ПИ Программирование на С# _Хотов.docx
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
2.22 Mб
Скачать
        1. Получение информации о методах

При получении информации о методах нам могут быть полезны методы GetMethods() и GetParameters():

Type myType = Type.GetType("TestConsole.User", false, true);

Console.WriteLine("Методы:");

foreach (MethodInfo method in myType.GetMethods())

{

string modificator = "";

if (method.IsStatic)

modificator += "static ";

if (method.IsVirtual)

modificator += "virtual ";

Console.Write(modificator + method.ReturnType.Name + " " + method.Name + " (");

//получаем все параметры

ParameterInfo[] parameters = method.GetParameters();

for(int i=0; i<parameters.Length; i++)

{

Console.Write(parameters[i].ParameterType.Name + " " + parameters[i].Name);

if(i+1<parameters.Length) Console.Write(", ");

}

Console.WriteLine(")");

}

На выходе получим информацию наподобие следующей:

Методы:

Void Display()

Int32 Payment (Int32 hours, Int32 perhour)

virtual String ToString()

virtual Boolean Equals (Object obj)

virtual Int32 GetHashCode()

Type GetType()

В данном случае использовалась простая форма метода GetMethods(), которая извлекает все общедоступные публичные методы. Но мы можем использовать и другую форму метода: MethodInfo[] GetMethods(BindingFlags). ПеречислениеBindingFlags может принимать различные значения:

  • DeclaredOnly: получает только методы непосредственно данного класса, унаследованные методы не извлекаются

  • Instance: получает только методы экземпляра

  • NonPublic: извлекает не публичные методы

  • Public: получает только публичные методы

  • Static: получает только статические методы

Объединяя данные значения с помощью побитовой операции ИЛИ можно комбинировать вывод. Например, получим только методы самого класса без унаследованных, как публичные, так и все остальные:

MethodInfo[] methods = myType.GetMethods(BindingFlags.DeclaredOnly

| BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public

        1. Получение конструкторов

Для получения конструкторов применяется метод ConstructorInfo[] GetConstructors():

Type myType = Type.GetType("TestConsole.User", false, true);

Console.WriteLine("Конструкторы:");

foreach(ConstructorInfo ctor in myType.GetConstructors())

{

Console.Write(myType.Name + " (");

// получаем параметры конструктора

ParameterInfo[] parameters = ctor.GetParameters();

for (int i = 0; i < parameters.Length; i++)

{

Console.Write(parameters[i].ParameterType.Name + " " + parameters[i].Name);

if (i + 1 < parameters.Length) Console.Write(", ");

}

Console.WriteLine(")");

}

        1. Получение информации о полях и свойствах

Для извлечения полей и свойств применяются соответственно методы GetFields() и GetProperties():

Type myType = Type.GetType("System.IO.FileStream", false, true);

Console.WriteLine("Поля:");

foreach (FieldInfo field in myType.GetFields())

{

Console.WriteLine("{0} {1}", field.FieldType, field.Name);

}

Console.WriteLine("Свойства:");

foreach (PropertyInfo prop in myType.GetProperties())

{

Console.WriteLine("{0} {1}", prop.PropertyType, prop.Name);

}