![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| emmanuil |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 9.1.2007 Репутация: нет Всего: 3 |
Можно ли сделать так в C#, чтобы в процедуру в качестве параметра передавать не переменную класса, а сам класс. В Delphi это делается просто:
TMyForm = class(TForm); TClassOfTMyForm = class of TMyForm; метод: procedure MyProc(AMyClass: TClassOfTMyForm) и сюда можно подавать класс, а не объект, а потом его создавать в процедуре. Как это сделать в C#. Или как можно создать класс по его названию? |
|||
|
||||
| altarvic |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 2.3.2007 Репутация: 1 Всего: 1 |
используй reflection
что-то типа:
Отличие от Delphi - в этот метод можно передавать любые классы (через оператор typeof) а не только производные от TForm |
|||
|
||||
| emmanuil |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 9.1.2007 Репутация: нет Всего: 3 |
Что-то не получается, маловато опыта в C#. Можешь написать пример? Нужно создать экземпляр и потом его испоьзовать, точнее нужно создать много форм.
Добавлено через 12 минут и 3 секунды Получилось! Спасибо! делаю так: private object MyProc(Type AMyClass) { ConstructorInfo info = AMyClass.GetConstructor(System.Type.EmptyTypes); return info.Invoke(null); } private void simpleButton1_Click(object sender, EventArgs e) { Form1 frm; frm = (Form1)MyProc(typeof(Form1)); frm.Show(); } Правильно ли я делаю? и правильно ли это вообще? Просто не хотелось бы постоянно преобразовывать! Есть ли еще способы? |
|||
|
||||
| _Dream |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 4.11.2006 Где: Там Репутация: нет Всего: нет |
эм.. а что ты пытаешься сделать и зачем тебе это?
--------------------
Noone dies a virgin. Life screws us all... |
|||
|
||||
| altarvic |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 2.3.2007 Репутация: 1 Всего: 1 |
Все способы по созданию экземпляра класса по типу класса Type так или иначе будут использовать reflection. Если у тебя передаваемый класс - это производные от TForm, то преобразование можно делать в самом методе
возвращается общий предок. В этом случае дополнительная функциональность в производных формах должна реализовываться в перекрываемых виртуальных методах. |
||||
|
|||||
| emmanuil |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 9.1.2007 Репутация: нет Всего: 3 |
altarvic, спасибо! Я разобрался!
Получается нелохо! Дело в том, что у меня есть формы для редактирования справочников. У всех у них есть общий предок - форма. И я хотел написать универсальный создатель этих справочников, чтобы по 10 раз не писать одно и тоже . В универсальный создатель подается еще и тип диалогового окна для редактирования, который в процессе создается, и другие параметры. Вообщем вышло достаточно прилично! Спасибо! И еще, знает ли кто-нибудь как создать экземпляр по имени класса(string)? |
|||
|
||||
| mr.DUDA |
|
||||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
-------------------- ![]() |
||||
|
|||||
| emmanuil |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 9.1.2007 Репутация: нет Всего: 3 |
mr.DUDA, спасибо!
|
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
||||
|
||||
| emmanuil |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 9.1.2007 Репутация: нет Всего: 3 |
Idsa, спасибо за ссылку!
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |