powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Подскажите по рефлексии и вложенным классам
20 сообщений из 20, страница 1 из 1
Подскажите по рефлексии и вложенным классам
    #38962288
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На примере (писал в блокноте, но, думаю, смысл понятен)
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
public class A
{
	public Class1 a1 {get; set;}
	public Class2 b1 {get; set;}
	public Class3 с1 {get; set;}
}

public class B
{
	public A a {get; set;}
	public Class4 b2 {get; set;}
	public Class5 c2 {get; set;}
}

main()
{
	//Имя вложенного класса (a1 или b1 или с1)
	String subClassName = "a1";
	B b = new B();
	b.b2 = new Class4();
	b.c2 = new Class5();
	b.a = new A();
	//Здесь надо через рефлексию создать экземпляр субкласса по его имени subClassName 
	//для a1 - b.a.a1 = new Class1();
	//для b1 - b.a.b1 = new Class2();
	//для c1 - b.a.c1 = new Class3();
}


Как сделать через рефлексию создание экземпляра вложенного класса, если создание экземпляра "основного" класса было реализовано не через рефлексию?
...
Рейтинг: 0 / 0
Подскажите по рефлексии и вложенным классам
    #38962292
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxix,

здесь нет вложенных классов
...
Рейтинг: 0 / 0
Подскажите по рефлексии и вложенным классам
    #38962294
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилsaxix,
здесь нет вложенных классов
Вложенные в кавычках. Не подобрал термина правильного. Класс A "вложен" в класс B
...
Рейтинг: 0 / 0
Подскажите по рефлексии и вложенным классам
    #38962297
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxixИзопропилsaxix,
здесь нет вложенных классов
Вложенные в кавычках. Не подобрал термина правильного. Класс A "вложен" в класс B
Класс B имеет член класса A.
...
Рейтинг: 0 / 0
Подскажите по рефлексии и вложенным классам
    #38962300
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если бы был не "вложенный", создавал бы через
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public object GetInstance(string strFullyQualifiedName)
{
      Type type = Type.GetType(strFullyQualifiedName);
      if (type != null)
           return Activator.CreateInstance(type);
       foreach (var asm in AppDomain.CurrentDomain.GetAssemblies())
       {
           type = asm.GetType(strFullyQualifiedName);
           if (type != null)
           return Activator.CreateInstance(type);
       }
       return null;
}
...
Рейтинг: 0 / 0
Подскажите по рефлексии и вложенным классам
    #38962301
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxixЕсли бы был не "вложенный", создавал бы через
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public object GetInstance(string strFullyQualifiedName)
{
      Type type = Type.GetType(strFullyQualifiedName);
      if (type != null)
           return Activator.CreateInstance(type);
       foreach (var asm in AppDomain.CurrentDomain.GetAssemblies())
       {
           type = asm.GetType(strFullyQualifiedName);
           if (type != null)
           return Activator.CreateInstance(type);
       }
       return null;
}


Но надо "вписаться" в уже созданный экземпляр класса B
...
Рейтинг: 0 / 0
Подскажите по рефлексии и вложенным классам
    #38962328
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxixНо надо "вписаться" в уже созданный экземпляр класса B
установите значение свойства - в чём проблема ?
object к A приведите
...
Рейтинг: 0 / 0
Подскажите по рефлексии и вложенным классам
    #38962405
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилsaxixНо надо "вписаться" в уже созданный экземпляр класса B
установите значение свойства - в чём проблема ?
object к A приведите
Создать экземпляр по имени через рефлексию могу, получим в результате экземпляр
Class1 class1 , а вот как привязать к b.a.a1 ?
...
Рейтинг: 0 / 0
Подскажите по рефлексии и вложенным классам
    #38962418
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне надо получить что-то типа
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
private B CreateIns(В b, String subClass)
{
...
}

B b = new B();
b.b2 = new Class4();
b.c2 = new Class5();
b = CreateIns(b, "a1");
...
Рейтинг: 0 / 0
Подскажите по рефлексии и вложенным классам
    #38962449
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а) использовать структуры, они не требуют инициализации
б) использовать конструктор класса, который инициализирует все поля внутри класса
в) использовать Class.Factory который будет возвращать нужный вам класс по названию, инициализированный как вам угодно
г) использовать Activator

у меня один вопрос? нафига это? если вы так делайте, значит вы делайте, что то неправильно.
...
Рейтинг: 0 / 0
Подскажите по рефлексии и вложенным классам
    #38962458
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxixно, думаю, смысл понятен)
непонятен смысл.

Код: c#
1.
2.
3.
4.
B.a=new A();
B.a.a1= CreateInst("n1") as A;
B.a.a2= CreateInst("n2") as A;
B.a.a3= CreateInst("n3") as A;
...
Рейтинг: 0 / 0
Подскажите по рефлексии и вложенным классам
    #38962468
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилsaxixно, думаю, смысл понятен)
непонятен смысл.

Код: c#
1.
2.
3.
4.
B.a=new A();
B.a.a1= CreateInst("n1") as A;
B.a.a2= CreateInst("n2") as A;
B.a.a3= CreateInst("n3") as A;


из этих трех мне нужно создавать только один, с именем, определенным в переменной.
То есть для B.a.a1 - a1 задается в переменной.

Думаю сделать так. Найти в классе B.a сеттер с именем, заданным в переменной и через него создать экземпляр и присвоить значение.
...
Рейтинг: 0 / 0
Подскажите по рефлексии и вложенным классам
    #38962479
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesа) использовать структуры, они не требуют инициализации
б) использовать конструктор класса, который инициализирует все поля внутри класса
в) использовать Class.Factory который будет возвращать нужный вам класс по названию, инициализированный как вам угодно
г) использовать Activator

у меня один вопрос? нафига это? если вы так делайте, значит вы делайте, что то неправильно.
Скажем, есть класс - контейнер, в котором хранятся неоднотипные данные. Класс B - контейнер, класс Class1 или Class2 или Class3 - данные. Также в классе объявлен обработчик данных, для каждого класса - свой. Инициализация нужна. Не все классы из этого списка должны быть инициализированы.
...
Рейтинг: 0 / 0
Подскажите по рефлексии и вложенным классам
    #38962484
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxix,

ну пусть класс свои внутренние и внешние поля инициализирует сам, зачем делать это "снаружи"?
...
Рейтинг: 0 / 0
Подскажите по рефлексии и вложенным классам
    #38962495
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtessaxix,

ну пусть класс свои внутренние и внешние поля инициализирует сам, зачем делать это "снаружи"?
Он не знает заранее, чем их инициализировать.
...
Рейтинг: 0 / 0
Подскажите по рефлексии и вложенным классам
    #38962499
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxixRoman Mejtessaxix,

ну пусть класс свои внутренние и внешние поля инициализирует сам, зачем делать это "снаружи"?
Он не знает заранее, чем их инициализировать.
Например, класс-контейнер "Гараж". В нем "подкласс" "Тойота", в нем свойства: кол-во, марка, и т.п. Это "грубый" пример.
...
Рейтинг: 0 / 0
Подскажите по рефлексии и вложенным классам
    #38962500
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesу меня один вопрос? нафига это? если вы так делайте, значит вы делайте, что то неправильно.
именно так


saxixиз этих трех мне нужно создавать только один, с именем, определенным в переменной.
То есть для B.a.a1 - a1 задается в переменной.
ну так задайте имя свойства с помощью рефлексии-
Код: c#
1.
b.GetType().GetProperty("a1").SetValue(b,CreateInst("a1"));
...
Рейтинг: 0 / 0
Подскажите по рефлексии и вложенным классам
    #38962503
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилRoman Mejtesу меня один вопрос? нафига это? если вы так делайте, значит вы делайте, что то неправильно.
именно так


saxixиз этих трех мне нужно создавать только один, с именем, определенным в переменной.
То есть для B.a.a1 - a1 задается в переменной.
ну так задайте имя свойства с помощью рефлексии-
Код: c#
1.
b.GetType().GetProperty("a1").SetValue(b,CreateInst("a1"));


Да, я как раз так счас и делаю. Через сеттер.
...
Рейтинг: 0 / 0
Подскажите по рефлексии и вложенным классам
    #38962512
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxixНапример, класс-контейнер "Гараж". В нем "подкласс" "Тойота", в нем свойства: кол-во, марка, и т.п. Это "грубый" пример.
Это не грубый пример, а ошибка проектирования.

1) никакого подкласса нет.
2) в гараже стоят не Тойоты и Опели, а автомобили (абстрактный класс), обладающие свойством "бренд"
3) в гараже стоят отдельные автомобили, количество - не является свойством автомобиля
4) для получения всех автомобилей определённого бренда в гараже - напишите гаражу соответсвующий метод
...
Рейтинг: 0 / 0
Подскажите по рефлексии и вложенным классам
    #38962514
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилsaxixНапример, класс-контейнер "Гараж". В нем "подкласс" "Тойота", в нем свойства: кол-во, марка, и т.п. Это "грубый" пример.
Это не грубый пример, а ошибка проектирования.

1) никакого подкласса нет.
2) в гараже стоят не Тойоты и Опели, а автомобили (абстрактный класс), обладающие свойством "бренд"
3) в гараже стоят отдельные автомобили, количество - не является свойством автомобиля
4) для получения всех автомобилей определённого бренда в гараже - напишите гаражу соответсвующий метод
Это был совсем грубый пример. Проектировка не моя, просто кое-что допилил.
Спасибо всем, сделал через сеттер.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Подскажите по рефлексии и вложенным классам
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]