Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Java vs .Net 
:(
    Опции темы
Karadul
Дата 20.2.2012, 19:40 (ссылка)    | (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 1
Всего: 1



Такая холиварная тема smile Чем С# лучше явы? Лямбды есть, знаю, а как обстоит дело с классами? Можно написать так?

Код

class Myclass {
    ...
}

m = Myclass;
o = new m();


Как обстоит дела с выполнением на юнипсах?

Слышал, что благодаря ключевому слову async гораздо проще писать асинхронные сетевые приложения?
PM MAIL   Вверх
VSB
Дата 22.2.2012, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 23.8.2007

Репутация: нет
Всего: 2



PM MAIL   Вверх
Karadul
Дата 22.2.2012, 10:46 (ссылка)  | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 1
Всего: 1



Там многабукав, к тому же там нет ответа на мои вопросы - не написано, что реально может Mono, и про пример кода выше.
PM MAIL   Вверх
Экскалупатор
Дата 22.2.2012, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



Цитата(Karadul @  20.2.2012,  18:40 Найти цитируемый пост)
Можно написать так?

а зачем так писать?
с какой целью проводить это сравнение вообще?
если "многобукав", то бери то что знаешь и используй, к чему эти холиварные вопросы? "умеет" "неумеет" всегда можно найти варианты, было бы желание...
PM MAIL ICQ   Вверх
Karadul
Дата 22.2.2012, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 1
Всего: 1



Экскалупатор, тебя что-то обидело?


Цитата(Экскалупатор @  22.2.2012,  12:15 Найти цитируемый пост)
с какой целью проводить это сравнение вообще?

Ищу замену яве, думаю, стоит ли переходить на сисярп. 
PM MAIL   Вверх
502
Дата 22.2.2012, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Я всегда прав
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 16.7.2011

Репутация: нет
Всего: 4



Цитата(Karadul @  20.2.2012,  19:40 Найти цитируемый пост)
Можно написать так?

не помню есть ли точно такое, но есть alias
Код

using m = Myclass;

PM MAIL   Вверх
Karadul
Дата 22.2.2012, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 1
Всего: 1



502, я имею в виду именно передать имя класса как параметр, а потом его инстанциировать. На замену фабрикам в яве, которые пробрасывают параметры конструктору. В питоне по крайней мере так можно.

Это сообщение отредактировал(а) Karadul - 22.2.2012, 13:54
PM MAIL   Вверх
Экскалупатор
Дата 22.2.2012, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



Цитата(Karadul @  22.2.2012,  11:52 Найти цитируемый пост)
Экскалупатор, тебя что-то обидело?

нет. 
я задал вполне резонный вопрос, зачем так писать. мне кажется билдер будет лучше. просто, на мой взгляд, довольно странно делать какие то выводы только на основе того можно так написать или нет, можно написать по другому, добившись такого же результата.
PM MAIL ICQ   Вверх
Karadul
Дата 22.2.2012, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 1
Всего: 1



Цитата(Экскалупатор @  22.2.2012,  14:24 Найти цитируемый пост)
мне кажется билдер будет лучше

Кто?

"Писать по-другому, добившись такого же результата" - это ява и есть, с универсальным костылем - (анонимным)КЛАССОМ, который заменяет и замыкания, и лямбды, и ссылки на класс из примера выше. Поверь мне, после питона так делать вовсе не хочется. К тому же, зная несколько довольно разных языков, в этих костылях начинаешь путаться.

К тому же ни на один вопрос ты так и не ответил, зато кто-то поставил 2 минуса посту.

Это сообщение отредактировал(а) Karadul - 22.2.2012, 14:47
PM MAIL   Вверх
Экскалупатор
Дата 22.2.2012, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



ну два минуса поставить сложно...
под билдером я имел ввиду паттерн который строит объекты. можешь рассмотреть ту же фабрику. чем она тебя не устраивает? ну есть еще такая штука как рефлексия, с помощью нее можно по названию. анонимный класс тут не причем.

Добавлено через 9 минут и 52 секунды
ты может опиши подробнее что хочется получить в результате(желательно с примерами), а то ты уперся в одну какую то возможность, а ответ может быть гораздо проще...
PM MAIL ICQ   Вверх
Karadul
Дата 22.2.2012, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 1
Всего: 1



Подробнее здесь, все решилось фабрикой. Надо было следующее: серверу передается порт и класс, который инстанциируется при подключении клиента и параметром передается сокет. И про рефлексию там написано, она полностью убивает все плюсы статического языка. Билдер это фабрика? Ну по сути это КОСТЫЛЬ, который должен компенсировать отсутствие кой-чего и к которому надо привыкать после других языков, или есть какие-то преимущества перед моим примером вначале?

Но это дерейл.

PM MAIL   Вверх
Экскалупатор
Дата 22.2.2012, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



у тебя название класса, экземпляр которого нужно создать, передается по сети? довольно сомнительная затея, но это мое личное мнение...
так а чем фабрика по итогу не устроила? это как раз укладывается в ее назначение. у меня даже не появилось бы идеи использовать в этом месте что то другое. фабрика позволяет инкапсулировать все что нужно для создания этих классов в одном месте, что будет несомненным плюсом. а ты же хочешь в каждом случае создавать все заново, что несомненно приведет к дублированию и усложнит(и без того довольно странное) поведение... почему не подошла фабрика? smile 
PM MAIL ICQ   Вверх
502
Дата 22.2.2012, 16:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Я всегда прав
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 16.7.2011

Репутация: нет
Всего: 4



Цитата(Karadul @  22.2.2012,  13:54 Найти цитируемый пост)
502, я имею в виду именно передать имя класса как параметр, а потом его инстанциировать

тогда может
Код

m = "Myclass";
o = new m();

не?

это вроде должно помочь


а ты подумал что будет если имя класса поменяется, как ты потом отследишь где надо поменять?
PM MAIL   Вверх
Karadul
Дата 22.2.2012, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 1
Всего: 1



Цитата(502 @  22.2.2012,  16:44 Найти цитируемый пост)
тогда может

Цитата(502 @  22.2.2012,  16:44 Найти цитируемый пост)
а ты подумал что будет если имя класса поменяется, как ты потом отследишь где надо поменять? 

Обсуждалось в том треде же. Поэтому не хотет.

В питоне такой код работает и довольно интуитивно пишется и читается:

Код

class C:
    pass

c = C
print c
# __main__.C
o = C()
print o
#<__main__.C instance at 0x00B59CD8>


Нде, судя по круглым глазам что там, что тут фича для статических языков довольно нестандартная. Но в сисярпе по крайней мере замыкания есть без костылей.
Ладно, вернемся к OP посту.

Добавлено через 12 минут и 10 секунд
Экскалупатор, ну почитай же тот тред, там все описано, пример кода здесь, а здесь то, что я взял. Фабрика - потому что костыль, который должен прикрыть непервоклассность классов и мне показался неинтуитивным (я до него допер не сразу), а в примере на питоне то, что хочется сделать - то и делаешь по кратчайшему пути.

Это сообщение отредактировал(а) Karadul - 22.2.2012, 17:18
PM MAIL   Вверх
Экскалупатор
Дата 22.2.2012, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



Цитата(Karadul @  22.2.2012,  16:13 Найти цитируемый пост)
Фабрика - потому что костыль, который должен прикрыть непервоклассность классов и мне показался неинтуитивным (я до него допер не сразу), а в примере на питоне то, что хочется сделать - то и делаешь по кратчайшему пути.

что такое "непервоклассность классов"? что такое в твоем понимании "первоклассный класс"?
вопрос интуитивной понятности отдельная тема, для меня интуитивно понятно что передавать название класса что бы потом его по этому названию искать и создавать на основе этого объект - это нелепость, для меня интуитивно понятно, что фабрика будет лучше потому, что код будет в одном месте собран, а не по всей программе, но это все мое имхо и мне так понятно, как это у тебя я не знаю.

по поводу кратчайшего пути тоже весьма спорно, сколько раз сталкивался что кратчайший довольно часто не лучший, но это опять же мне так интуитивно понятно исходя из моего опыта и, опять же, попадает в область моего ИМХО.
*но если бы увидел что кто то в проекте такое замутил то сразу же этот человек получил бы в бубен.

ты определись что тебе надо, я думаю само собой разумеется тот факт что все языки устроены в какой то стемени похоже, но не одинаково. в шарпе скорее всего у тебя не получится сделать по "кратчайшему" в твоем понимании пути, да и я думаю тебя в этом пути никто не поддержит.
PM MAIL ICQ   Вверх
Karadul
Дата 22.2.2012, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 1
Всего: 1



First class object - значит, что его можно сохранить в переменную. В яве это только примитивные типы и обьекты.

Цитата(Экскалупатор @  22.2.2012,  18:27 Найти цитируемый пост)
ля меня интуитивно понятно что передавать название класса что бы потом его по этому названию искать и создавать на основе этого объект - это нелепость

Искать и создавать? Блин, ты упорно не понимаешь или не хочешь понять, что я хочу сделать. Не название класса (строку), а ссылку на класс.

Цитата(Экскалупатор @  22.2.2012,  18:27 Найти цитируемый пост)
то код будет в одном месте собран

А в примере на питоне он не в одном месте?

Цитата(Экскалупатор @  22.2.2012,  18:27 Найти цитируемый пост)
что кратчайший довольно часто не лучший

Если язык это не может - то не лучший. Ну дело не в том. Насколько я понимаю, фабрика сделана для обхода определенных ограничений статических языков, людям, знающим языки, где такое не надо, тяжело понять, что же им делать. До фабрики я дошел своим умом и не сразу. Поправь меня, если это не так. А то ты так активно против, но ни одного нормального аргумента (кроме того, что шарп похоже так не может) я так и не услышал.

И вообще думай шире. Не сярпом (явой итд) единым. Похоже, есть много вещей, о которых ты не догадываешься smile 
Замечал у жавоидов подобное - несмотря на местами архаичные языковые конструкции, стоит заикнуться, например, о том, что хорошо бы в 2012-то году уже замыкания иметь, как им рвет пердак и они, истекая слюнями, начинают доказыать, что я чмо, как будто я их маму задел. Может это синдром единственного языка? С моими не очень богатыми знаниями явы и питона я не бросаюсь на людей, которым в них чего-то не хватает (разве что это из области, в которой я совсем мало понимаю).
PM MAIL   Вверх
Экскалупатор
Дата 22.2.2012, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



я не пытаюсь ничего доказывать, я пытался сказать что нужно просто определиться, любую ситуацию можно разрулить на любом языке, только разными способами, заметь я не разу не сказал что шарп хорош или плох, как и ява как и любой другой язык, статический или нет. повторяя твои слова не питоном(или любым другим языком)... 
то о чем ты можешь или не можешь догадаться определяется только опытом использования. мне к примеру никогда не приходилось решать задачи в которых по какой то причине могла понадобиться ссылка на класс(но не на объект этого класса). к примеру я считаю что подобная функциональность добавила бы мне проблем в проектах, хотя бы в той простой вещи что инициализация объектов будет расползаться по всему проекту. 
Цитата(Karadul @  22.2.2012,  19:20 Найти цитируемый пост)
А в примере на питоне он не в одном месте?

я не писал ничего на питоне, но на сколько я понял то не в одном, ты хочешь передать ссылку на класс и там, куда ты ее передал, проинициализировать объект. соответственно мест становится много. опять же может быть я ошибаюсь, но я понял это так.
Цитата(Karadul @  22.2.2012,  19:20 Найти цитируемый пост)
Похоже, есть много вещей, о которых ты не догадываешься

))) да, я никогда не говорил что знаю все.


по большому счету мне не нравится только одна вещь, это когда люди начинают все сравнивать между собой по принципу: лопата плоская и ей удобно копать, а грабли с зубцами и ими копать неудобно. и сразу же обычно следует вопрос: а как сделать так что бы у граблей все зубцы превратились в плоскость как у лопаты, что бы было удобно копать, потому что раньше я копал лопатой и мне это нравилось, но теперь я хочу копать граблями, но мне неудобно!!!
 пример конечно корявый, но думаю суть ясна.

Это сообщение отредактировал(а) Экскалупатор - 22.2.2012, 23:43
PM MAIL ICQ   Вверх
Karadul
Дата 23.2.2012, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 1
Всего: 1



Цитата(Экскалупатор @  22.2.2012,  23:41 Найти цитируемый пост)
любую ситуацию можно разрулить на любом языке

Можно, но зачем?

user posted image

Мне показалось, что твоя любовь к разрулению исходит от того, что ты другого просто не видел. Где разрулять не приходится. И ОСОБЕННОСТИ ЯЗЫКА страшны не столько сами по себе, сколько заставляют пердолиться в срачло при переходе с похожих вещей. Например, в lua нет ооп, через какие-то танцы оно эмулируется, но когда я увидел это, я решил, что я без него обойдусь - без ооп и вообще без lua.

Цитата(Экскалупатор @  22.2.2012,  23:41 Найти цитируемый пост)
определяется только опытом использования.

Для тебя это может быть и нормально, а мне не хочется придрачиваться к каждому языку, с которым я соприкасаюсь. Есть же общая теория, вроде ООП, которая с небольшими отличиями одинакова.

Цитата(Экскалупатор @  22.2.2012,  23:41 Найти цитируемый пост)
 инициализация объектов будет расползаться по всему проекту. 

Покажи мне в моем примере, где она расползается? И чем это принципиально отличается от фабрики? Там ты тупо пробрасываешь параметры конструктору.

Цитата(Экскалупатор @  22.2.2012,  23:41 Найти цитируемый пост)
пример конечно корявый, но думаю суть ясна.

Это намек на то, что ява/шарп для копания не предназначены, на них можно только наступать? smile 
PM MAIL   Вверх
Экскалупатор
Дата 23.2.2012, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



Цитата(Karadul @  22.2.2012,  23:42 Найти цитируемый пост)
И ОСОБЕННОСТИ ЯЗЫКА страшны

))) это печально.
но ты упорно не хочешь понимать про что я тебе пытаюсь объяснить. пойми вещи существуют в этом мире не для того что бы находиться в соответствии с твоими ожиданиями, и языки программирования тут не исключение. я просто пытался сказать что выбор того или иного языка не должен основываться на опыте использования предыдущих языков, в каждом из них всегда можно найти свои плюсы и минусы.

по теме: почитай что такое Generic Class, может быть тебе поможет.
PM MAIL ICQ   Вверх
kulikov
Дата 23.2.2012, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 23.2.2012

Репутация: нет
Всего: нет



Для разработки по windows лучшего средства чем .net/c# не существует в природе. Однако, не смотря на всю пародию вроде моно, технология это не кросплатформенная. Если хотите разрабатывать не только под окнами, тогда лучшее решение это ява. Да, существует много технологий, но ява самая оптимальная.
Однако, лично меня, попытка преобрести хоть какие скилы на яве ввергает в уныние. Уж очень она устаревшая, сравнительно с c#. Сейчас правда есть разрабатывается проект Котлин. Это будет ЯП, больше похож на c# нежели на яву и он будет компилироваться в байт-код.

PM MAIL   Вверх
Karadul
Дата 23.2.2012, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 1
Всего: 1



Цитата(Экскалупатор @  23.2.2012,  10:22 Найти цитируемый пост)
выбор того или иного языка не должен основываться на опыте использования предыдущих языков

Очень интересно, а на чем же он должен основываться? На удобстве рисования гуя (ну и это тоже, кстати)? smile Ну не опытом единым, но изучение языка требует вложений, и мне было бы интересно знать, чем эти вложения будут окупаться. Или языки надо учить от переизбытка свободного времени и нехватки денег на новый комп?
PM MAIL   Вверх
Karadul
Дата 23.2.2012, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 1
Всего: 1



Видел сервера на сисярпе. Если 2 процента красноглазиков на десктопе меня не интересует, то на серверах их вовсе не 2%, особенно на low end. Отсуда вопрос - при минимальном или отсуствующем гуе можно будет запустить программу на питухоси?
Я вобщем-то не против мультиплатформенности, но не ценой того, что на моей родной платформе от гуя приходится рыдать, а из программ, которые я знаю, с гуем, который можно назвать нормальным, большинство - IDE для явы smile))

Цитата(kulikov @  23.2.2012,  11:55 Найти цитируемый пост)
Уж очень она устаревшая, сравнительно с c#.

Можешь привести примеры, чем шарп лучше?

Как обстоит дело с совместимостью в пределах windows? На 2000 можно поставить максимум Framework 2.0. Остальные ставятся на любую винду? 
PM MAIL   Вверх
kulikov
Дата 23.2.2012, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 23.2.2012

Репутация: нет
Всего: нет



Цитата(Karadul @  23.2.2012,  12:12 Найти цитируемый пост)
Можешь привести примеры, чем шарп лучше?

Нет. Во многих книгах по c# это и так написано, я уже не говорю об Интернете. Не ленись  smile 
PM MAIL   Вверх
Karadul
Дата 23.2.2012, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 1
Всего: 1



Цитата(kulikov @  23.2.2012,  13:24 Найти цитируемый пост)
Нет. 

Тогда что ты в этом треде делаешь?

Ах да, можно поставить .Net Framework без прав админа и зашивания в ось? Большинство фреймверков работает просто после копирования.

Это сообщение отредактировал(а) Karadul - 23.2.2012, 18:24
PM MAIL   Вверх
kulikov
Дата 23.2.2012, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 23.2.2012

Репутация: нет
Всего: нет



Цитата(Karadul @  23.2.2012,  18:22 Найти цитируемый пост)
Тогда что ты в этом треде делаешь?

Учу таких как ты, не ленится. А что ты делаешь на этом форуме? В школе на уроках надо сидеть.

Цитата(Karadul @  23.2.2012,  18:22 Найти цитируемый пост)
Ах да, можно поставить .Net Framework без прав админа и зашивания в ось? Большинство фреймверков работает просто после копирования.

И что с того?
PM MAIL   Вверх
Karadul
Дата 23.2.2012, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 1
Всего: 1



Цитата(kulikov @  23.2.2012,  18:38 Найти цитируемый пост)
Учу таких как ты, не ленится.

Детей своих учи.


Цитата(kulikov @  23.2.2012,  18:38 Найти цитируемый пост)
И что с того? 

Так да или нет?
PM MAIL   Вверх
erm0l0v
Дата 5.3.2012, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 11.1.2011

Репутация: нет
Всего: 1



Есть много способов реализовать фабрику на C# выбор конкретного способа завит от задачи.

Я бы сделал так:

Код

void RegistClass<T>(Type typeClass)
{
  //регистрируем класс
}

object CreateClass<T>()
{
  //создаем класс
}


здесь T это тип базового класса или интерфейс который необходимо создать. В методе RegistClass регистрируем тип а в методе CreateClass создаем объект для этого типа.

Кроме того есть библиотеки (например от Microsoft) которые уже реализуют фабрику с кучей дополнительных возможностей.

Использовать оператор new как у вас в примере насколько я знаю в C# нельзя. Вместо этого вы можете использовать например такую конструкцию:
Код

Activator.CreateInstance(t)


где t это переменная типа Type
PM MAIL   Вверх
Karadul
Дата 14.3.2012, 04:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 1
Всего: 1



erm0l0v, а как передать параметры конструктору?
PM MAIL   Вверх
erm0l0v
Дата 14.3.2012, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 11.1.2011

Репутация: нет
Всего: 1



Доступно множество перегрузок метода
Код

CreateInstance


Одна из них выглядит так:
Код

public static object CreateInstance(Type type, params object[] args);


Вторым параметром принимается массив объектов: это как раз и будут параметры для передачи в конструктор, а ключевое слово params позволяет использовать функцию более прозрачно:
Код

Activator.CreateInstance(t, 1, "Word")

Вот так например можно передать в конструктор переменную типа int и "Word"
PM MAIL   Вверх
Karadul
Дата 16.3.2012, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 1
Всего: 1



А что будет при несовпадении типа / количества обьектов? Если исключение при выполнении, то это не нужно.
PM MAIL   Вверх
erm0l0v
Дата 16.3.2012, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 11.1.2011

Репутация: нет
Всего: 1



Ну да будет исключение, что вполне логично.

вы можете отловить исключение с использованием try catch. Но в .NET да как и в Java try catch дорогостоящая операция и если несовпадение параметров случается часто то приложение может работать медленно.

Activator - это не единственный способ создания классов, я привел его в примере только потому что помнил только его, возможно вы сможете найти альтернативные способы создания которые например вместо исключения возвращают null.

Я бы эту ситуацию решил бы так:
Перед созданием класса проверил какие есть конструкторы с какими параметрами.

Для того чтобы получить список конструкторов есть функция класса Type
Код

GetConstructors()


функция возвращает коллекцию объектов класса ConstructorInfo

у этого класса есть функция 
Код

GetParameters() 

которая информацию о параметрах, там много информации включая их тип и порядок объявления в конструкторе.

Из всего выше перечисленного можно определить валидность переданных параметров.
PM MAIL   Вверх
Karadul
Дата 18.3.2012, 05:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: 1
Всего: 1



Цитата(erm0l0v @  16.3.2012,  15:18 Найти цитируемый пост)
вы можете отловить исключение с использованием try catch. 

В статическом языке хотелось бы, чтобы такие вещи отлавливались при компиляции, а не в рантайме. Поэтому такая вещь меня категорически не устраивает. В общем, все то же, что и в яве.
Интересно, почему? Есть какие-то причины, по которым это трудно сделать?
PM MAIL   Вверх
erm0l0v
Дата 19.3.2012, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 11.1.2011

Репутация: нет
Всего: 1



Все что статический анализатор кода может отловить он отловит, при грубой ошибке проект просто не скомпенсируется. Все остальное или очень сложно проверить или невозможно вообще.
В примере который я привел в качестве параметров передаваемых конструктору используется массив. Статическому анализатору будет сложно проверить такую функцию так как сам массив может взяться откуда угодно, да хоть с генерироваться случайным образом.
Да это в принципе и не нужно ведь есть юнит тесты.
PM MAIL   Вверх
techPro
Дата 3.5.2012, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 16.3.2012

Репутация: нет
Всего: 1



Оба этих языка программирования имеют интересную историю, потрясающие возможности и в своем развитии влияют друг на друга. Я думаю, что изучать и использовать стоит оба эти языка
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1266 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.