Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Подскажите по рефлексии и вложенным классам / 20 сообщений из 20, страница 1 из 1
19.05.2015, 10:13
    #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
19.05.2015, 10:17
    #38962292
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по рефлексии и вложенным классам
saxix,

здесь нет вложенных классов
...
Рейтинг: 0 / 0
19.05.2015, 10:18
    #38962294
saxix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по рефлексии и вложенным классам
Изопропилsaxix,
здесь нет вложенных классов
Вложенные в кавычках. Не подобрал термина правильного. Класс A "вложен" в класс B
...
Рейтинг: 0 / 0
19.05.2015, 10:18
    #38962297
saxix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по рефлексии и вложенным классам
saxixИзопропилsaxix,
здесь нет вложенных классов
Вложенные в кавычках. Не подобрал термина правильного. Класс A "вложен" в класс B
Класс B имеет член класса A.
...
Рейтинг: 0 / 0
19.05.2015, 10:20
    #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
19.05.2015, 10:21
    #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
19.05.2015, 10:36
    #38962328
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по рефлексии и вложенным классам
saxixНо надо "вписаться" в уже созданный экземпляр класса B
установите значение свойства - в чём проблема ?
object к A приведите
...
Рейтинг: 0 / 0
19.05.2015, 11:19
    #38962405
saxix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по рефлексии и вложенным классам
ИзопропилsaxixНо надо "вписаться" в уже созданный экземпляр класса B
установите значение свойства - в чём проблема ?
object к A приведите
Создать экземпляр по имени через рефлексию могу, получим в результате экземпляр
Class1 class1 , а вот как привязать к b.a.a1 ?
...
Рейтинг: 0 / 0
19.05.2015, 11:23
    #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
19.05.2015, 11:42
    #38962449
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по рефлексии и вложенным классам
а) использовать структуры, они не требуют инициализации
б) использовать конструктор класса, который инициализирует все поля внутри класса
в) использовать Class.Factory который будет возвращать нужный вам класс по названию, инициализированный как вам угодно
г) использовать Activator

у меня один вопрос? нафига это? если вы так делайте, значит вы делайте, что то неправильно.
...
Рейтинг: 0 / 0
19.05.2015, 11:45
    #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
19.05.2015, 11:49
    #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
19.05.2015, 11:53
    #38962479
saxix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по рефлексии и вложенным классам
Roman Mejtesа) использовать структуры, они не требуют инициализации
б) использовать конструктор класса, который инициализирует все поля внутри класса
в) использовать Class.Factory который будет возвращать нужный вам класс по названию, инициализированный как вам угодно
г) использовать Activator

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

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

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

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


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


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


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

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

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


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