Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Получение экземпляра типа Type






Получить экземпляр класса Type можно несколькими способами. Выбор способа зависит от условий задачи, и от того, какой информацией о типе вы располагаете при разработке программы (на момент компиляции).

1. Простейший случай получения экземпляра класса Type – когда тип определён в самой программе, или если при компиляции указана ссылка на сборку, содержащую данный тип. В этом случае экземпляр класса Type можно получить посредством операции Typeof(имя класса)

 

using System;

namespace App1

{ class Class1

{ static void Main()

{ Type type = typeof(Class1);

Console.WriteLine(type.FullName);

Console.ReadLine();

}

}

}

 

Следует подчеркнуть, что возможности среды.NET по работе с метаданными доступны из любого языка программирования, удовлетворяющего CLS (Common Language Specification). Поэтому всегда можно найти соответствующие конструкции в других языках среды.NET. Например, операции Typeof языка C# соответствуют операция __ Typeof из MS C++ или оператор GetType из VB.NET.

2. Если есть экземпляр интересующего вас класса, то соответствующий ему экземпляр класса Type можно получить с помощью метода GetType. Все классы в среде.NET получают этот метод в наследство от класса Object.

 

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. Возможна ситуация, когда во время написания программы тип объектов, с которыми предстоит работать, еще неизвестен. Он станет известен, только во время выполнения программы. Способ получения имени класса во время исполнения программы может быть самым разным. Например, вы запрашиваете его у пользователя, или считываете при старте программы из файла конфигурации. В этом случае указанием только имени типа не обойтись. Необходимо указать, в какой именно сборке содержится данный тип. Эту сборку потом необходимо загрузить динамически.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.