Чтение онлайн

на главную - закладки

Жанры

Интернет-журнал "Домашняя лаборатория", 2007 №9
Шрифт:

{

Type t = any.GetType;

Console.WriteLine("Тип {0}: {1}, значение: {2}",

name, any.GetType, any.ToString );

Console.WriteLine("Методы класса: ");

MethodInfo[] ClassMethods = t.GetMethods;

foreach (Methodlnfo curMethod in ClassMethods)

{

Console.WriteLine(curMethod);

}

Console.WriteLine("Все члены класса: ");

MemberInfo[] ClassMembers = t.GetMembers;

foreach (Memberlnfo curMember in ClassMembers)

{

Console.WriteLine(curMember.ToString );

}

}//WhoIsWho

Коротко прокомментирую эту процедуру. Вначале создается переменная t типа Tуре.

Значением этой переменной будет тип аргумента, переданного в процедуру в качестве значения параметра any. Напомню, any имеет базовый тип object и потому метод может быть вызван с аргументом, роль которого может играть выражение любого типа. Далее вызываются методы переменной t — GetMethods и GetMembers . Эти методы соответственно возвращают в качестве значений массивы элементов классов MethodInfo и MemberInfo. Эти классы содержатся в пространстве имен Reflection, они хранят информацию в первом случае о методах класса, во втором — о полях и методах класса, заданного переменной t. В пространстве имен Reflection имеются и другие классы, чьи методы и свойства полезны для получения дополнительной информации об исследуемом классе. Но я не буду сейчас столь подробно развивать эту тему.

В процедуре Main дважды вызывается процедура WhoIsWho. В первом вызове ее аргументом является выражение типа double, во втором — сам объект ts, вызывающий метод:

ts.WhoIsWho("2+2.5", 2+2.5);

ts.WhoIsWho("ts", ts);

И класс double, и созданный в этом проекте класс Testing имеют довольно много методов. Имеют они и свойства. Процедура WhoIsWho выдаст подробную информацию обо всех элементах этих классов. Результаты консольного вывода, полученного при двух вызовах этой процедуры, показаны на рис. 6.2.

Рис. 6.2. Информация о классах int и Testing, полученная в процедуре WhoIsWho

Рассмотрим выводимую информацию о классах. Для созданного в проекте класса Testing отображается информация о полях и методах как собственных, так и наследуемых от общего родителя — класса Object. Заметьте, отображается информация только об открытых полях и методах класса, а поскольку поля нашего класса закрыты, то и информации о них нет.

Класс Int подробно обсуждался в предыдущей и в этой лекции. Все методы, которые могут вызывать переменные (объекты) класса Int, были уже рассмотрены. Тем не менее, из выводимой информации можно узнать и нечто новое, поскольку выдаются сведения и о статических полях и методах класса.

Статические поля и методы арифметических классов

Все арифметические классы, в том числе класс Int, обладают двумя полезными полями (свойствами) — MinVaiue и MaxVaiue.

Эти поля возвращают минимальное и максимальное значение, которое могут иметь экземпляры класса. Поля являются статическими и потому недоступны для экземпляров класса и могут быть вызваны только при указании имени класса. Разумно привести пример вызова этих полей для класса Int и, например, для класса Double:

//Min и Мах значения типов

Console.WriteLine("Class int");

Console.WriteLine("Мин. значение int = " + int.MinVaiue);

Console.WriteLine("Макс. значение int = " + int.MaxVaiue);

Console.WriteLine("Class double");

Console.WriteLine("Мин. значение double = " + double.MinVaiue);

Console.WriteLine("Макс. значение double = " + double.MaxVaiue);

Все арифметические классы, в том числе класс Int, обладают перегруженным статическим методом Parse, у которого первым обязательным параметром является строка, задающая значение соответствующего арифметического типа в привычной для данного региона (локализованной) форме. Форматом строки и стилем ее представления можно управлять с помощью других параметров метода Parse. Вот пример вызова этого метода для классов Int и Double;

/// <summary>

/// Преобразования типа с использованием метода Parse

/// </summary>

public void Parsing

{

//method Parse

Console.WriteLine("Введите целое");

string strdata = Console.ReadLine;

int intdata = int.Parse(strdata);

Console.WriteLine("Введите число с дробной частью и порядком");

strdata = Console.ReadLine;

double doubdata = double.Parse(strdata);

Console.WriteLine("intdata = {0}; doubdata = {1}",

intdata, doubdata);

}

//Parsing

Как видите, метод Parse с успехом заменяет соответствующий метод класса Convert.

На рис. 6.3 можно увидеть консольный вывод, полученный в результате работы процедуры Parsing.

Рис. 6.3. Результаты работы процедуры Parsing

Операция new

Пора вернуться к основной теме — операциям, допустимым в языке С#. Последней из еще не рассмотренных операций высшего уровня приоритета является операция new. Ключевое слово new используется в двух контекстах — как модификатор и как операция в инициализирующих выражениях объявителя. Во втором случае результатом выполнения операции new является создание нового объекта и вызов соответствующего конструктора. Примеров подобного использования операции new было приведено достаточно много, в том числе и в этой лекции.

Арифметические операции

В языке C# имеются обычные для всех языков арифметические операции — "+, -, *, /, Все они перегружены. Операции "+" и могут быть унарными и бинарными. Операция деления "/" над целыми типами осуществляет деление нацело, для типов с плавающей и фиксированной точкой — обычное деление. Операция определена над всеми арифметическими типами и возвращает остаток от деления нацело. Тип результата зависит от типов операндов. Приведу пример вычислений с различными арифметическими типами:

Поделиться:
Популярные книги

Попытка возврата. Тетралогия

Конюшевский Владислав Николаевич
Попытка возврата
Фантастика:
альтернативная история
9.26
рейтинг книги
Попытка возврата. Тетралогия

…спасай Россию! Десант в прошлое

Махров Алексей
1. Господин из завтра
Фантастика:
альтернативная история
8.96
рейтинг книги
…спасай Россию! Десант в прошлое

Сделать выбор

Петрова Елена Владимировна
3. Лейна
Фантастика:
юмористическое фэнтези
попаданцы
8.43
рейтинг книги
Сделать выбор

Я тебя верну

Вечная Ольга
2. Сага о подсолнухах
Любовные романы:
современные любовные романы
эро литература
5.50
рейтинг книги
Я тебя верну

Последнее желание

Сапковский Анджей
1. Ведьмак
Фантастика:
фэнтези
9.43
рейтинг книги
Последнее желание

Найдёныш. Книга 2

Гуминский Валерий Михайлович
Найденыш
Фантастика:
альтернативная история
4.25
рейтинг книги
Найдёныш. Книга 2

Комбинация

Ланцов Михаил Алексеевич
2. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Комбинация

Шесть тайных свиданий мисс Недотроги

Суббота Светлана
Любовные романы:
любовно-фантастические романы
эро литература
7.75
рейтинг книги
Шесть тайных свиданий мисс Недотроги

Первый рейд Гелеарр

Саргарус Александр
Фантастика:
фэнтези
5.00
рейтинг книги
Первый рейд Гелеарр

Город Богов

Парсиев Дмитрий
1. Профсоюз водителей грузовых драконов
Фантастика:
юмористическая фантастика
детективная фантастика
попаданцы
5.00
рейтинг книги
Город Богов

Жена по ошибке

Ардова Алиса
Любовные романы:
любовно-фантастические романы
7.71
рейтинг книги
Жена по ошибке

Идеальный мир для Лекаря 8

Сапфир Олег
8. Лекарь
Фантастика:
юмористическое фэнтези
аниме
7.00
рейтинг книги
Идеальный мир для Лекаря 8

Вечный. Книга I

Рокотов Алексей
1. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга I

Архил...? 4

Кожевников Павел
4. Архил...?
Фантастика:
фэнтези
попаданцы
альтернативная история
5.50
рейтинг книги
Архил...? 4