![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Karadul |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: 1 Всего: 1 |
Такая холиварная тема
![]()
Как обстоит дела с выполнением на юнипсах? Слышал, что благодаря ключевому слову async гораздо проще писать асинхронные сетевые приложения? |
|||
|
||||
VSB |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 23.8.2007 Репутация: нет Всего: 2 |
||||
|
||||
Karadul |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: 1 Всего: 1 |
Там многабукав, к тому же там нет ответа на мои вопросы - не написано, что реально может Mono, и про пример кода выше.
|
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 5 Всего: 24 |
||||
|
||||
Karadul |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: 1 Всего: 1 |
||||
|
||||
502 |
|
|||
![]() Я всегда прав ![]() Профиль Группа: Участник Сообщений: 134 Регистрация: 16.7.2011 Репутация: нет Всего: 4 |
||||
|
||||
Karadul |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: 1 Всего: 1 |
502, я имею в виду именно передать имя класса как параметр, а потом его инстанциировать. На замену фабрикам в яве, которые пробрасывают параметры конструктору. В питоне по крайней мере так можно.
Это сообщение отредактировал(а) Karadul - 22.2.2012, 13:54 |
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 5 Всего: 24 |
нет. я задал вполне резонный вопрос, зачем так писать. мне кажется билдер будет лучше. просто, на мой взгляд, довольно странно делать какие то выводы только на основе того можно так написать или нет, можно написать по другому, добившись такого же результата. |
|||
|
||||
Karadul |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: 1 Всего: 1 |
Кто? "Писать по-другому, добившись такого же результата" - это ява и есть, с универсальным костылем - (анонимным)КЛАССОМ, который заменяет и замыкания, и лямбды, и ссылки на класс из примера выше. Поверь мне, после питона так делать вовсе не хочется. К тому же, зная несколько довольно разных языков, в этих костылях начинаешь путаться. К тому же ни на один вопрос ты так и не ответил, зато кто-то поставил 2 минуса посту. Это сообщение отредактировал(а) Karadul - 22.2.2012, 14:47 |
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 5 Всего: 24 |
ну два минуса поставить сложно...
под билдером я имел ввиду паттерн который строит объекты. можешь рассмотреть ту же фабрику. чем она тебя не устраивает? ну есть еще такая штука как рефлексия, с помощью нее можно по названию. анонимный класс тут не причем. Добавлено через 9 минут и 52 секунды ты может опиши подробнее что хочется получить в результате(желательно с примерами), а то ты уперся в одну какую то возможность, а ответ может быть гораздо проще... |
|||
|
||||
Karadul |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: 1 Всего: 1 |
Подробнее здесь, все решилось фабрикой. Надо было следующее: серверу передается порт и класс, который инстанциируется при подключении клиента и параметром передается сокет. И про рефлексию там написано, она полностью убивает все плюсы статического языка. Билдер это фабрика? Ну по сути это КОСТЫЛЬ, который должен компенсировать отсутствие кой-чего и к которому надо привыкать после других языков, или есть какие-то преимущества перед моим примером вначале?
Но это дерейл. |
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 5 Всего: 24 |
у тебя название класса, экземпляр которого нужно создать, передается по сети? довольно сомнительная затея, но это мое личное мнение...
так а чем фабрика по итогу не устроила? это как раз укладывается в ее назначение. у меня даже не появилось бы идеи использовать в этом месте что то другое. фабрика позволяет инкапсулировать все что нужно для создания этих классов в одном месте, что будет несомненным плюсом. а ты же хочешь в каждом случае создавать все заново, что несомненно приведет к дублированию и усложнит(и без того довольно странное) поведение... почему не подошла фабрика? ![]() |
|||
|
||||
502 |
|
||||
![]() Я всегда прав ![]() Профиль Группа: Участник Сообщений: 134 Регистрация: 16.7.2011 Репутация: нет Всего: 4 |
тогда может
не? это вроде должно помочь а ты подумал что будет если имя класса поменяется, как ты потом отследишь где надо поменять? |
||||
|
|||||
Karadul |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: 1 Всего: 1 |
Обсуждалось в том треде же. Поэтому не хотет. В питоне такой код работает и довольно интуитивно пишется и читается:
Нде, судя по круглым глазам что там, что тут фича для статических языков довольно нестандартная. Но в сисярпе по крайней мере замыкания есть без костылей. Ладно, вернемся к OP посту. Добавлено через 12 минут и 10 секунд Экскалупатор, ну почитай же тот тред, там все описано, пример кода здесь, а здесь то, что я взял. Фабрика - потому что костыль, который должен прикрыть непервоклассность классов и мне показался неинтуитивным (я до него допер не сразу), а в примере на питоне то, что хочется сделать - то и делаешь по кратчайшему пути. Это сообщение отредактировал(а) Karadul - 22.2.2012, 17:18 |
||||
|
|||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 5 Всего: 24 |
что такое "непервоклассность классов"? что такое в твоем понимании "первоклассный класс"? вопрос интуитивной понятности отдельная тема, для меня интуитивно понятно что передавать название класса что бы потом его по этому названию искать и создавать на основе этого объект - это нелепость, для меня интуитивно понятно, что фабрика будет лучше потому, что код будет в одном месте собран, а не по всей программе, но это все мое имхо и мне так понятно, как это у тебя я не знаю. по поводу кратчайшего пути тоже весьма спорно, сколько раз сталкивался что кратчайший довольно часто не лучший, но это опять же мне так интуитивно понятно исходя из моего опыта и, опять же, попадает в область моего ИМХО. *но если бы увидел что кто то в проекте такое замутил то сразу же этот человек получил бы в бубен. ты определись что тебе надо, я думаю само собой разумеется тот факт что все языки устроены в какой то стемени похоже, но не одинаково. в шарпе скорее всего у тебя не получится сделать по "кратчайшему" в твоем понимании пути, да и я думаю тебя в этом пути никто не поддержит. |
|||
|
||||
Karadul |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: 1 Всего: 1 |
First class object - значит, что его можно сохранить в переменную. В яве это только примитивные типы и обьекты.
Искать и создавать? Блин, ты упорно не понимаешь или не хочешь понять, что я хочу сделать. Не название класса (строку), а ссылку на класс. А в примере на питоне он не в одном месте? Если язык это не может - то не лучший. Ну дело не в том. Насколько я понимаю, фабрика сделана для обхода определенных ограничений статических языков, людям, знающим языки, где такое не надо, тяжело понять, что же им делать. До фабрики я дошел своим умом и не сразу. Поправь меня, если это не так. А то ты так активно против, но ни одного нормального аргумента (кроме того, что шарп похоже так не может) я так и не услышал. И вообще думай шире. Не сярпом (явой итд) единым. Похоже, есть много вещей, о которых ты не догадываешься ![]() Замечал у жавоидов подобное - несмотря на местами архаичные языковые конструкции, стоит заикнуться, например, о том, что хорошо бы в 2012-то году уже замыкания иметь, как им рвет пердак и они, истекая слюнями, начинают доказыать, что я чмо, как будто я их маму задел. Может это синдром единственного языка? С моими не очень богатыми знаниями явы и питона я не бросаюсь на людей, которым в них чего-то не хватает (разве что это из области, в которой я совсем мало понимаю). |
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 5 Всего: 24 |
я не пытаюсь ничего доказывать, я пытался сказать что нужно просто определиться, любую ситуацию можно разрулить на любом языке, только разными способами, заметь я не разу не сказал что шарп хорош или плох, как и ява как и любой другой язык, статический или нет. повторяя твои слова не питоном(или любым другим языком)...
то о чем ты можешь или не можешь догадаться определяется только опытом использования. мне к примеру никогда не приходилось решать задачи в которых по какой то причине могла понадобиться ссылка на класс(но не на объект этого класса). к примеру я считаю что подобная функциональность добавила бы мне проблем в проектах, хотя бы в той простой вещи что инициализация объектов будет расползаться по всему проекту. я не писал ничего на питоне, но на сколько я понял то не в одном, ты хочешь передать ссылку на класс и там, куда ты ее передал, проинициализировать объект. соответственно мест становится много. опять же может быть я ошибаюсь, но я понял это так. ))) да, я никогда не говорил что знаю все. по большому счету мне не нравится только одна вещь, это когда люди начинают все сравнивать между собой по принципу: лопата плоская и ей удобно копать, а грабли с зубцами и ими копать неудобно. и сразу же обычно следует вопрос: а как сделать так что бы у граблей все зубцы превратились в плоскость как у лопаты, что бы было удобно копать, потому что раньше я копал лопатой и мне это нравилось, но теперь я хочу копать граблями, но мне неудобно!!! пример конечно корявый, но думаю суть ясна. Это сообщение отредактировал(а) Экскалупатор - 22.2.2012, 23:43 |
|||
|
||||
Karadul |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: 1 Всего: 1 |
Можно, но зачем? ![]() Мне показалось, что твоя любовь к разрулению исходит от того, что ты другого просто не видел. Где разрулять не приходится. И ОСОБЕННОСТИ ЯЗЫКА страшны не столько сами по себе, сколько заставляют пердолиться в срачло при переходе с похожих вещей. Например, в lua нет ооп, через какие-то танцы оно эмулируется, но когда я увидел это, я решил, что я без него обойдусь - без ооп и вообще без lua. Для тебя это может быть и нормально, а мне не хочется придрачиваться к каждому языку, с которым я соприкасаюсь. Есть же общая теория, вроде ООП, которая с небольшими отличиями одинакова.
Покажи мне в моем примере, где она расползается? И чем это принципиально отличается от фабрики? Там ты тупо пробрасываешь параметры конструктору. Это намек на то, что ява/шарп для копания не предназначены, на них можно только наступать? ![]() |
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 5 Всего: 24 |
))) это печально. но ты упорно не хочешь понимать про что я тебе пытаюсь объяснить. пойми вещи существуют в этом мире не для того что бы находиться в соответствии с твоими ожиданиями, и языки программирования тут не исключение. я просто пытался сказать что выбор того или иного языка не должен основываться на опыте использования предыдущих языков, в каждом из них всегда можно найти свои плюсы и минусы. по теме: почитай что такое Generic Class, может быть тебе поможет. |
|||
|
||||
kulikov |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 23.2.2012 Репутация: нет Всего: нет |
Для разработки по windows лучшего средства чем .net/c# не существует в природе. Однако, не смотря на всю пародию вроде моно, технология это не кросплатформенная. Если хотите разрабатывать не только под окнами, тогда лучшее решение это ява. Да, существует много технологий, но ява самая оптимальная.
Однако, лично меня, попытка преобрести хоть какие скилы на яве ввергает в уныние. Уж очень она устаревшая, сравнительно с c#. Сейчас правда есть разрабатывается проект Котлин. Это будет ЯП, больше похож на c# нежели на яву и он будет компилироваться в байт-код. |
|||
|
||||
Karadul |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: 1 Всего: 1 |
Очень интересно, а на чем же он должен основываться? На удобстве рисования гуя (ну и это тоже, кстати)? ![]() |
|||
|
||||
Karadul |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: 1 Всего: 1 |
Видел сервера на сисярпе. Если 2 процента красноглазиков на десктопе меня не интересует, то на серверах их вовсе не 2%, особенно на low end. Отсуда вопрос - при минимальном или отсуствующем гуе можно будет запустить программу на питухоси?
Я вобщем-то не против мультиплатформенности, но не ценой того, что на моей родной платформе от гуя приходится рыдать, а из программ, которые я знаю, с гуем, который можно назвать нормальным, большинство - IDE для явы ![]() Можешь привести примеры, чем шарп лучше? Как обстоит дело с совместимостью в пределах windows? На 2000 можно поставить максимум Framework 2.0. Остальные ставятся на любую винду? |
|||
|
||||
kulikov |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 23.2.2012 Репутация: нет Всего: нет |
||||
|
||||
Karadul |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: 1 Всего: 1 |
||||
|
||||
kulikov |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 23.2.2012 Репутация: нет Всего: нет |
||||
|
||||
Karadul |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: 1 Всего: 1 |
||||
|
||||
erm0l0v |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 11.1.2011 Репутация: нет Всего: 1 |
Есть много способов реализовать фабрику на C# выбор конкретного способа завит от задачи.
Я бы сделал так:
здесь T это тип базового класса или интерфейс который необходимо создать. В методе RegistClass регистрируем тип а в методе CreateClass создаем объект для этого типа. Кроме того есть библиотеки (например от Microsoft) которые уже реализуют фабрику с кучей дополнительных возможностей. Использовать оператор new как у вас в примере насколько я знаю в C# нельзя. Вместо этого вы можете использовать например такую конструкцию:
где t это переменная типа Type |
||||
|
|||||
Karadul |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: 1 Всего: 1 |
erm0l0v, а как передать параметры конструктору?
|
|||
|
||||
erm0l0v |
|
||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 11.1.2011 Репутация: нет Всего: 1 |
Доступно множество перегрузок метода
Одна из них выглядит так:
Вторым параметром принимается массив объектов: это как раз и будут параметры для передачи в конструктор, а ключевое слово params позволяет использовать функцию более прозрачно:
Вот так например можно передать в конструктор переменную типа int и "Word" |
||||||
|
|||||||
Karadul |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: 1 Всего: 1 |
А что будет при несовпадении типа / количества обьектов? Если исключение при выполнении, то это не нужно.
|
|||
|
||||
erm0l0v |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 11.1.2011 Репутация: нет Всего: 1 |
Ну да будет исключение, что вполне логично.
вы можете отловить исключение с использованием try catch. Но в .NET да как и в Java try catch дорогостоящая операция и если несовпадение параметров случается часто то приложение может работать медленно. Activator - это не единственный способ создания классов, я привел его в примере только потому что помнил только его, возможно вы сможете найти альтернативные способы создания которые например вместо исключения возвращают null. Я бы эту ситуацию решил бы так: Перед созданием класса проверил какие есть конструкторы с какими параметрами. Для того чтобы получить список конструкторов есть функция класса Type
функция возвращает коллекцию объектов класса ConstructorInfo у этого класса есть функция
которая информацию о параметрах, там много информации включая их тип и порядок объявления в конструкторе. Из всего выше перечисленного можно определить валидность переданных параметров. |
||||
|
|||||
Karadul |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: 1 Всего: 1 |
В статическом языке хотелось бы, чтобы такие вещи отлавливались при компиляции, а не в рантайме. Поэтому такая вещь меня категорически не устраивает. В общем, все то же, что и в яве. Интересно, почему? Есть какие-то причины, по которым это трудно сделать? |
|||
|
||||
erm0l0v |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 11.1.2011 Репутация: нет Всего: 1 |
Все что статический анализатор кода может отловить он отловит, при грубой ошибке проект просто не скомпенсируется. Все остальное или очень сложно проверить или невозможно вообще.
В примере который я привел в качестве параметров передаваемых конструктору используется массив. Статическому анализатору будет сложно проверить такую функцию так как сам массив может взяться откуда угодно, да хоть с генерироваться случайным образом. Да это в принципе и не нужно ведь есть юнит тесты. |
|||
|
||||
techPro |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 16.3.2012 Репутация: нет Всего: 1 |
Оба этих языка программирования имеют интересную историю, потрясающие возможности и в своем развитии влияют друг на друга. Я думаю, что изучать и использовать стоит оба эти языка
|
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | .NET для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |