русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Создание объекта по его типу


Дата добавления: 2015-06-12; просмотров: 563; Нарушение авторских прав


При создании объекта вызывается его конструктор. Если разработчика устраивает вариант создания объекта с вызовом конструктора без аргументов (конструктора по умолчанию), то задача решается очень просто. Например, так:

 

class Class1

{ int n = 5;

 

static void Main()

{ string className = "App1.Class1";

Type type = Type.GetType(className);

Object data = Activator.CreateInstance(type);

Console.WriteLine(Trace1.ObjectFields("data", data));

Console.ReadLine();

}

}

 

Для варианта создания объекта с вызовом конструктора с аргументами предназначен специальный класс Activator . У него есть набор статических методов CreateInstance, с помощью которых можно создавать объекты, не только имея объект Type, но также по имени сборки и имени класса, или по файлу сборки и имени класса. Среди методов CreateInstance есть и такие, которые позволяют использовать конструкторы с аргументами и задавать пользовательские атрибуты создаваемого класса.

Примеры использования различных вариантов Activator.CreateInstance:

 

using System;

using System.Reflection;

using System.Diagnostics;

 

namespace ConsoleApplication2

{ class Class1

{ public static string DotNetFrameworkDir()

{ Assembly testAssy = Assembly.Load("mscorlib.dll");

return System.IO.Path.GetDirectoryName(testAssy.Location);

}

static void Main()

{ // создаём объект по имени сборки и имени класса

Object intObj = Activator.CreateInstance("mscorlib.dll"

, "System.Int32");

intObj = 5;

Console.WriteLine(Trace2.ObjectFields("intObj", intObj));

 

// создаём объект по файлу сборки и имени класса

Object rgn = Activator.CreateInstanceFrom(DotNetFrameworkDir()

+ "\\System.Drawing.dll"



, "System.Drawing.Region");

Console.WriteLine(Trace2.ObjectFields("rgn", rgn));

 

// Готовим параметры для вызова конструктора

// Rectangle(Int32 x, Int32 y, Int32 width, Int32 height);

object[] ctorArgs = { 10, 10, 100, 100 };

 

// Грузим сборку

Assembly assembly = Assembly.LoadWithPartialName("System.Drawing");

Object rect = Activator.CreateInstance(assembly.FullName

, "System.Drawing.Rectangle"

, false // ignoreCase, учитывать регистр!

, 0, null // по умолчанию

, ctorArgs // вот они - параметры!

, null, null, null // всё остальное тоже по умолчанию

);

Console.WriteLine(Trace2.ObjectFields("rect", rect));

 

Console.ReadLine();

}

}

}

 

Примечание. Здесь применён простой способ получения пути к каталогу .NET Framework. Дело в том, что сборка mscorlib.dll используется в любой сборке, и потому всегда загружена. Остаётся только получить путь к папке, где лежит файл этой сборки, т.к. эта сборка всегда находится в каталоге .NET Framework.

Здесь приведён вариант создания объекта с использованием конструктора с параметрами. Составлен массив из параметров и передан в Activator.CreateInstance. Среди возможного множества конструкторов будет использован тот, который имеет в точности то же количество параметров и те же типы (и в том же порядке!), что и в переданном массиве параметров.

Примечание. Наряду с классом Activator способностью создавать объекты по их типу обладают классы Assembly, AppDomain и некоторые другие. У них тоже есть методы CreateInstance, работа с которыми ведётся подобным образом.



<== предыдущая лекция | следующая лекция ==>
Члены класса | Динамический вызов методов


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.008 сек.