Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов. За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее. ✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать». Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами! Создание объекта по его типу
При создании объекта вызывается его конструктор. Если разработчика устраивает вариант создания объекта с вызовом конструктора без аргументов (конструктора по умолчанию), то задача решается очень просто. Например, так:
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, работа с которыми ведётся подобным образом.
|