Герберт Шилдт - C# 4.0: полное руководство
- Название:C# 4.0: полное руководство
- Автор:
- Жанр:
- Издательство:ООО И.Д. Вильямс
- Год:2011
- Город:Москва -- Киев
- ISBN:978-5-8459-1684-6
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Герберт Шилдт - C# 4.0: полное руководство краткое содержание
В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки.
Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию
C# 4.0: полное руководство - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
MemberTypes.Constructor
MemberTypes.Method
MemberTypes.Field
MemberTypes.Event
MemberTypes.Property
Следовательно, тип члена можно определить, проверив свойство MemberType
. Так, если свойство MemberType
имеет значение MemberTypes.Method
, то проверяемый член является методом.
В класс Memberlnfо
входят два абстрактных метода: GetCustomAttributes()
и IsDefined()
. Оба метода связаны с атрибутами. Первый из них получает список специальных атрибутов, имеющих отношение к вызывающему объекту, а второй устанавливает, определен ли атрибут для вызывающего метода. В версию .NET Framework Version 4.0 внедрен метод GetCustomAttributesData()
, возвращающий сведения о специальных атрибутах. (Подробнее об атрибутах речь пойдет далее в этой главе.)
Класс Туре
добавляет немало своих собственных методов и свойств к числу тех, что определены в классе Memberlnfо
. В качестве примера ниже перечислен ряд наиболее часто используемых методов класса Туре
.
Метод - Назначение
Constructorlnfо[] GetConstructors()- Получает список конструкторов для заданного типа
EventInfo[] GetEvents()- Получает список событий для заданного типа
Fieldlnfо[] GetFields()- Получает список полей для заданного типа
Type[] GetGenericArguments()- Получает список аргументов типа, связанных с закрыто сконструированным обобщенным типом, или же список параметров типа, если заданный тип определен как обобщенный. Для открыто сконструированного типа этот список может содержать как аргументы, так и параметры типа. (Более подробно обобщения рассматриваются в главе 18.)
MemberInfo[] GetMembers()- Получает список членов для заданного типа
MethodInfo[] GetMethods()- Получает список методов для заданного типа
PropertyInfo[] GetProperties()- Получает список свойств для заданного типа
Далее приведен ряд наиболее часто используемых свойств, доступных только для чтения и определенных в классе Туре
.
Свойство - Назначение
Assembly Assembly- Получает сборку для заданного типа
TypeAttributes Attributes- Получает атрибуты для заданного типа
Type BaseType- Получает непосредственный базовый тип для заданного типа
string FullName- Получает полное имя заданного типа
bool IsAbstract- Истинно, если заданный тип является абстрактным
bool isArray- Истинно, если заданный тип является массивом
bool IsClass- Истинно, если заданный тип является классом
bool IsEnum- Истинно, если заданный тип является перечислением
bool IsGenericParameter- Истинно, если заданный тип является параметром обобщенного типа. (Более подробно обобщения рассматриваются в главе 18.)
bool IsGenericType- Истинно, если заданный тип является обобщенным. (Более подробно обобщения рассматриваются в главе 18.)
string Namespace- Получает пространство имен для заданного типа
Применение рефлексии
С помощью методов и свойств класса Туре
можно получить подробные сведения о типе данных во время выполнения программы. Это довольно эффективное средство. Ведь получив сведения о типе данных, можно сразу же вызвать его конструкторы и методы или воспользоваться его свойствами. Следовательно, рефлексия позволяет использовать код, который не был доступен во время компиляции.
Прикладной интерфейс Reflection API весьма обширен и поэтому не может быть полностью рассмотрен в этой главе. Ведь для этого потребовалась бы целая книга! Но прикладной интерфейс Reflection API имеет ясную логическую структуру, а следовательно, уяснив одну его часть, нетрудно понять и все остальное. Принимая во внимание это обстоятельство, в последующих разделах демонстрируются четыре основных способа применения рефлексии: получение сведений о методах, вызов методов, конструирование объектов и загрузка типов данных из сборок.
Имея в своем распоряжении объект класса Туре
, можно получить список методов, поддерживаемых отдельным типом данных, используя метод GetMethods()
. Ниже приведена одна из форм, подходящих для этой цели.
MethodInfo[] GetMethods()
Этот метод возвращает массив объектов класса Methodlnfо
, которые описывают методы, поддерживаемые вызывающим типом. Класс MethodInfo
находится в пространстве имен System.Reflection
.
Класс MethodInfo
является производным от абстрактного класса MethodBase
, который в свою очередь наследует от класса MemberInfо
. Это дает возможность пользоваться всеми свойствами и методами, определенными в этих трех классах. Например, для получения имени метода служит свойство Name
. Особый интерес вызывают два члена класса MethodInfo
: ReturnType
и GetParameters()
.
Возвращаемый тип метода находится в доступном только для чтения свойстве ReturnType
, которое является объектом класса Туре.
Метод GetParameters()
возвращает список параметров, связанных с анализируемым методом. Ниже приведена его общая форма.
Parameterlnfо[] GetParameters();
Сведения о параметрах содержатся в объекте класса ParameterInfо
. В классе Parameterlnfо
определено немало свойств и методов, описывающих параметры. Особое значение имеют два свойства: Name
— представляет собой строку, содержащую имя параметра, a ParameterType
— описывает тип параметра, который инкапсулирован в объекте класса Туре
.
В качестве примера ниже приведена программа, в которой рефлексия используется для получения методов, поддерживаемых классом MyClass
. В этой программе выводится возвращаемый тип и имя каждого метода, а также имена и типы любых параметров, которые может иметь каждый метод.
// Анализ методов с помощью рефлексии.
using System;
using System.Reflection;
class MyClass {
int x;
int y;
public MyClass(int i, int j) {
x = i;
y = j;
}
public int Sum() {
return x + y;
}
public bool IsBetween(int i) {
if (x < i && i < y) return true;
else return false;
}
public void Set(int a, int b) {
x = a;
y = b;
}
public void Set(double a, double b) {
x = (int)a; y = (int)b;
}
public void Show() {
Console.WriteLine(" x: {0}, у: {1}", x, y);
}
}
class ReflectDemo {
static void Main() {
Type t = typeof(MyClass); // получить объект класса Type,
// представляющий класс MyClass
Интервал:
Закладка: