Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 28 29 [30] 31 32 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#436
,
|
|
|
|
Цитата korvin @ Цитата KILLER @ Да ты не кипятись так. Какой тогда прок от ваших модулей, если все что ты тут перечислил без проблем реализуется с помощью неймспейсов ??? Немспейс - содержит объявления и реализации, то есть все то что нужно. разве нэймспейсы в C++ уже умеют разделять интерфейс и реализацию? а причем тут неймспейсы? А с разделением реализации/интерфейса справляются классы с точки зрения логики и файлы и единицы трансляции с точки зрения "физики". Добавлено Цитата --Ins-- @ Нет, ес-но, собственно C# ведь C++-ный синтаксис и тянет. Это, конечно, вопрос исключительно синтаксиса, но вопрос на самом деле серьезный. Насколько удобно иметь перед глазами отдельно объявление класса и всех его методов, чтобы реализация не путалась перед глазами. В таких случаях в 90% и документация класса не нужна. Все читаешь и понимаешь по исходникам Полностью согласен. Более того, я так и пишу. И это единственное, чего мне не нравится в питоне, но там по-другому и не получилось бы. Добавлено Цитата Shaggy @ как пример: у меня GDI+ инициализируется/финализируется в этих секциях т.е. просто подключил модуль и работаем Singleton. Отдельный объект, который отвечает за взаимодействия с низким уровнем GDI+ у тебя есть? |
|
Сообщ.
#437
,
|
|
|
|
Цитата D_KEY @ А с разделением реализации/интерфейса справляются классы Точно так же, как лопата справляется с задачей забивания гвоздей. Да, справляется, строго говоря, только вот задача класса - это описывать объект, или содержать в себе какие-то левые функции, переменные, типы? Ты может тоже и вправду считаешь что C# - это 100% ОО-язык? |
|
Сообщ.
#438
,
|
|
|
|
Цитата --Ins-- @ Ты нефига не понял Допустим есть необработанное исключение. Если оно возникнет, то будет вызвана специальная функция обработчик. Прикол в том, что адрес этой функции хранится в некой глобальной переменной. Возникло необработанное исключение - читаем адрес и вызываем функцию по адресу. Так вот, в модуле system.pas объявлена такая функция по-умолчанию, она показывает окошко об ошибке с текстом runtime-error. А вот модуль, скажем, SysUtils.pas назначает этой переменной адрес своей функции, которая покажет более развернутую информацию об исключении. А вот в модуле специализированной утилиты-построителя отчетов вообще может быть показан навороченный диалог со стеком вызовов и ссылкой на сайт разработчика Понял?Ну, или safecall-исключения можно по другому обрабатывать. По-умолчанию если safecall-вызов привел к исключению, то на вызываемой возбуждается EOleException. Это не всегда удобно, удобнее было бы возбудить то же исключение, что и возникло внутри модуля (если это возможно). Я когда-то писал функцию, которая это делает. Естественно ее нужно установить в initialization Ага, я понял теперь, у нас за это отвечают сишные функци, можно переопределить свою функцию и поставиьт ловушку, которая и будет это все ловить и обработка уже в юзеровской функции будет происходить |
|
Сообщ.
#439
,
|
|
|
|
Цитата KILLER @ можно переопределить свою функцию Не сомневаюсь что можно. В какой момент? |
|
Сообщ.
#440
,
|
|
|
|
Цитата --Ins-- @ Не сомневаюсь что можно. В какой момент? А в какой тебе нужно? |
|
Сообщ.
#441
,
|
|
|
|
Цитата KILLER @ А в какой тебе нужно? Как только так сразу |
|
Сообщ.
#442
,
|
|
|
|
Цитата D_KEY @ Singleton. Отдельный объект, который отвечает за взаимодействия с низким уровнем GDI+ у тебя есть? так они все взаимодействуют с низким уровнем, это просто обёртки т.е. ты предлагаешь завести отдельный класс для инициализации/финализации? |
|
Сообщ.
#443
,
|
|
|
|
Цитата --Ins-- @ Как только так сразу ![]() Ну вот берешь и ставишь ловушку в конструктор класса, в деструкторе снимаешь, но на практике я таким ниразу не пользовался, т.к. таких случаев не припомню, чтобы при инициализации переменных возникали исключения, чаще ставят такие ловушки в определеные места, чтобы локализировать ошибку и быстрее найти место где она расположена... |
|
Сообщ.
#444
,
|
|
|
|
Цитата KILLER @ чтобы при инициализации переменных возникали исключения Ты снова нифига не понял |
|
Сообщ.
#445
,
|
|
|
|
Цитата --Ins-- @ Ты снова нифига не понял ![]() ну как я понял, у вас это все назначается через SetUnhandledExceptionFilter ? Или что то наподобии этого? |
|
Сообщ.
#446
,
|
|
|
|
KILLER, короче, найди любой стандартный юнит Delphi, открой и посмотри. Почти каждый имеет секцию инициализации/финализации
|
|
Сообщ.
#447
,
|
|
|
|
Цитата --Ins-- @ KILLER, короче, найди любой стандартный юнит Delphi, открой и посмотри. Почти каждый имеет секцию инициализации/финализации Я верю что имеет, но сам понимаешь, глобальные переменные не айс, плюс эта секция в плюсах - тело неймспейса. Я просто думал сначало, что эти секции нужны для чего то другого... |
|
Сообщ.
#448
,
|
|
|
|
Цитата --Ins-- @ Цитата D_KEY @ А с разделением реализации/интерфейса справляются классы Точно так же, как лопата справляется с задачей забивания гвоздей. Да, справляется, строго говоря, только вот задача класса - это описывать объект, или содержать в себе какие-то левые функции, переменные, типы? Описывать объекты. Содержать в себе какие-то левые функции, переменные, типы не нужно. Методы, статические методы, внутренние классы, поля. Только не левые, а те, которые необходимы. Добавлено Цитата Shaggy @ Цитата D_KEY @ Singleton. Отдельный объект, который отвечает за взаимодействия с низким уровнем GDI+ у тебя есть? так они все взаимодействуют с низким уровнем, это просто обёртки т.е. ты предлагаешь завести отдельный класс для инициализации/финализации? ![]() Нет. Для работы с GDI+. Ты ведь решаешь какую-то задачу с помощью GDI+? Правильно? |
|
Сообщ.
#449
,
|
|
|
|
Цитата D_KEY @ Нет. Для работы с GDI+. Ты ведь решаешь какую-то задачу с помощью GDI+? Правильно? твой вариант: класс без методов, в конструкторе startup, в деструкторе shutdown что нужно сделать клиенту: подключить библиотеку в клиентском коде объявить переменную этого типа работаем я правильно понял? мой вариант: в initialization модуля startup, в finalization shutdown что нужно сделать клиенту: подключаем модуль работаем |
|
Сообщ.
#450
,
|
|
|
|
Shaggy, я о том, что эта инициализация должна делаться за кулисами того класса, который обеспечивает нужный функционал(и реализован с использованием GDI+). Если у тебя несколько классов используют низкоуровневые средства GDI+, то это ИМХО просто неправильно. Такие вещи нужно инкапсулировать. Ибо скорее всего, классы, использующие GDI+ могут успешно решать свои задачи, если будут использовать какое-то другое средство, обеспечивающее нужный функционал.
|