Читайте также:
|
|
Получить экземпляр класса Type можно несколькими способами. Выбор способа зависит от условий задачи, и от того, какой информацией о типе вы располагаете при разработке программы (на момент компиляции).
1. Простейший случай – когда тип определён в вашей программе, или если при компиляции указана ссылка на сборку, содержащую данный тип. В этом случае экземпляр класса Type можно получить посредством операции typeof (все примеры в этой статье написаны на C#):
using System;namespace App1{ class Class1 { static void Main() { Type type = typeof(Class1); Console.WriteLine(type.FullName); Console.ReadLine(); } }} |
То, что в примерах программ используется именно язык C#, не играет принципиальной роли. Дело в том, что возможности среды.Net по работе с метаданными доступны из любого языка программирования, удовлетворяющего CLS (common language specification). Поэтому вы всегда найдёте соответствующие конструкции в других языках. Например, операции typeof языка C# соответствуют операция __typeof из MC++ или оператор GetType из VB.NET. |
2. Если есть экземпляр интересующего вас класса, то соответствующий ему экземпляр класса Type можно получить с помощью метода GetType. Этот метод получают в наследство от класса Object все классы в среде.Net.
Class1 app = new Class1();Type type = app.GetType(); |
3. Имеется возможность перебрать все типы, определённые в сборке, и найти нужный класс по каким-либо критериям или выполнить необходимые действия со всеми классами в сборке. Вот так, например, можно напечатать имена всех типов, содержащихся в текущей сборке-приложении:
using System;using System.Reflection;namespace App1{ class Class1 { static void Main() { foreach (Type type in Assembly.GetExecutingAssembly().GetTypes()) Console.WriteLine(type.Name); Console.ReadLine(); } }} |
В этом примере для получения текущей сборки-приложения использован статический метод GetExetutingAssembly класса Assembly, затем с помощью метода GetTypes получен массив всех типов, содержащихся в текущей сборке.
Обращаю ваше внимание на то, что в этом примере было использовано пространство имён System.Reflection. Это главное вместилище классов и других типов, имеющих отношение к метаданным и рефлексии. Большинство типов, с которыми мы познакомимся ниже, определены в этом пространстве имён. Класс Type – исключение. Он настолько важен, что его описание помещено в пространство имён System.
4. Возможна ситуация, когда во время написания программы тип объектов, с которыми предстоит работать, неизвестен. Способ получения имени класса во время исполнения программы может быть самый разным. Например, вы запрашиваете его у пользователя, или считываете при старте программы из файла конфигурации. В этом случае указанием только имени типа не обойтись. Необходимо указать, в какой именно сборке содержится данный тип. Эту сборку потом необходимо загрузить динамически.
Дата добавления: 2015-11-16; просмотров: 42 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Анализ атрибутов во время выполнения программы | | | Характеристики типа как целого |