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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.07.2013, 13:03   #11
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию

Цитата:
так можно в dispinterface
Можно пример?
В планах порабощение вселенной...
zumm вне форума Ответить с цитированием
Старый 04.07.2013, 13:25   #12
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,755
По умолчанию

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

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

Код:
ISomeInterface = interface(IUnknown)
['GUID']
  function GetSomeValue: TSomeType;
  procedure SetSomeValue(ASomeVariable: TSomeType);

  property SomeProperty: TSomeType read GetSomeValue write SetSomeValue;

  function SomeFunction: TSomeType;
end;

...

TBaseClass = class(TInterfacedObject)
protected
  FSomeVariable: TSomeType;

  function GetSomeValue: TSomeType;
  procedure SetSomeValue(ASomeVariable: TSomeType);
public
  property SomeProperty: TSomeType read GetSomeValue write SetSomeValue;
end;

...

TSomeClassOne = class(TBaseClass, ISomeInterface)
public
  function SomeFunction: TSomeType;
end;

TSomeClassTwo = class(TBaseClass, ISomeInterface)
public
  function SomeFunction: TSomeType;
end;

...

var
  SomeInterface: ISomeInterface;
  TemporaryFoo: TSomeType;

...

  case SomeTerms of
    isOne:
    begin
      SomeInterface := TSomeClassOne.Create;
    end;

    isTwo:
    begin
      SomeInterface := TSomeClassTwo.Create;
    end;
  end;

  with SomeInterface do
  begin
    SomeProperties := 'SomeValue';
    TemporaryFoo := SomeFunction;
  end;
Я решил проблему через TBaseClass, где реализовываю все туеву хучу геттеров/сеттеров. Но мне бы очень хотелось от него избавиться.

UDPATE:
Забыл добавить, что классы TSomeClassOne и TSomeClassTwo планируется вынести в DLL, конечно же.
В планах порабощение вселенной...

Последний раз редактировалось zumm; 04.07.2013 в 13:50.
zumm вне форума Ответить с цитированием
Старый 04.07.2013, 14:03   #14
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,755
По умолчанию

Цитата:
Сообщение от zumm Посмотреть сообщение
Забыл добавить, что классы TSomeClassOne и TSomeClassTwo планируется вынести в DLL, конечно же.
Простые свойства можно и через обычную запись (структуру в Си) передавать. Интерфейсы нужны, как правило, для управления чем-либо.
Vapaamies вне форума Ответить с цитированием
Старый 04.07.2013, 14:07   #15
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Интерфейсы не поддерживают свойства. Интерфейсный класс может их содержать, в интерфейсах properties запрещены.
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 04.07.2013, 15:26   #16
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
интерфейсы не поддерживают декларацию переменных.
Ну я тоже с этим не сталкивался ни разу. Да и не коробит пару лишних геттеров\сеттеров писнуть пусть даже пустых.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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