Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.07.2013, 00:57   #1
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию [феншуй] Interface и property

Здравствуйте, товарищи! Обгуглился уже до смерти, а найти ответ на мой эстетический вопрос так и не удалось. Надеюсь, кто нибудь из вас мне поможет.

Собственно, вопрос: как при объявлении интерфейса обойтись без get/set функций для свойств?

Что есть:
Код:
ISomeInterface = interface(IUnknown)
  function GetValue: TSomeType;
  procedure SetValue(SomeVar: TSomeType);

  property SomeProperty: TSomeType read GetValue write SetValue;
end;
Что хочется:
Код:
ISomeInterface = interface(IUnknown)
  property SomeProperty: TSomeType;
end;
Не, ну ведь не дело для 5 свойств писать 10 велосипедных функций.
В планах порабощение вселенной...
zumm вне форума Ответить с цитированием
Старый 04.07.2013, 01:08   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

не припомню в Делфи автосвойств.

придется видимо копипастить эти моменты.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.07.2013, 01:14   #3
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию

Цитата:
придется видимо копипастить эти моменты.
Мне как то это совсем не по душе. И ведь ладно бы у меня в классах реализующих эти интерфейсы свойства читались/писались через геттеры/сеттеры, так ведь нет, они , всего то, ссылаются на приватные переменные.

Код:
TSomeClass = class(TComponent, ISomeInterface)
private
  FSomeVar: TSomeType;
public
  property SomeProperty: TSomeType read FSomeVar write FSomeVar;
end;
Вот и зачем мне тут весь этот огород с get/set?
В планах порабощение вселенной...
zumm вне форума Ответить с цитированием
Старый 04.07.2013, 02:00   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

короче того синтаксиса что вы привели в последнем посту, я ничего не знаю.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.07.2013, 02:36   #5
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,770
По умолчанию

Цитата:
Сообщение от zumm Посмотреть сообщение
Не, ну ведь не дело для 5 свойств писать 10 велосипедных функций.
Так интерфейсы COM именно для этого и придуманы, и даже выдавались в свое время за революционо новый подход к программированию.

В Delphi, если интерфейсы не нужны для общения с внешним кодом, обычно вполне элегантно можно обойтись процедурами и функциями of object, используя их как упрощенный аналог делегатов.
Vapaamies вне форума Ответить с цитированием
Старый 04.07.2013, 08:13   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ISomeInterface = interface(IUnknown)
property SomeProperty: TSomeType;
end;
Как-то я не пойму, а как тогда компилятор поймет что с этим свойством делать при обращении к нему?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.07.2013, 11:31   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Как-то я не пойму, а как тогда компилятор поймет что с этим свойством делать при обращении к нему?
Оно станет простой переменной.

ТС, если хотите property без Get/Set, тогда вам нужен просто var, он ничем не отличается от
Код:
property SomeProperty: TSomeType;
Свойства и задуманы для того чтобы запретить запись, или же что-то сделать с данными перед записью/чтением в/из защищенной переменной.
Человек_Борща вне форума Ответить с цитированием
Старый 04.07.2013, 11:38   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
тогда вам нужен просто var
Не просто var, а переменная в public секции. Что есть не фонтан
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.07.2013, 11:39   #9
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию

Stilet, да, похоже что вопрос и правда глупый, точек чтения/записи то нету. Но, может быть можно как то сделать хотя бы одну точку для все переменных? Черег дженерики, например.

Человек_Борща, насколько мне известно, интерфейсы не поддерживают декларацию переменных.
В планах порабощение вселенной...
zumm вне форума Ответить с цитированием
Старый 04.07.2013, 11:54   #10
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Код:
property SomeProperty: TSomeType;
так можно в dispinterface
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Notice: Trying to get property of non-object. для property of static property Jakethefish PHP 8 16.08.2011 16:09
External Interface Юлия_utcit JavaScript, Ajax 1 03.01.2011 23:24
Delphi and Interface crossmark Общие вопросы Delphi 2 20.07.2010 12:32
Реализация interface Syltan Общие вопросы C/C++ 4 15.06.2010 13:19
раздел interface . vedro-compota Общие вопросы Delphi 4 24.04.2010 12:33