Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.09.07;
Скачать: CL | DM;

Вниз

Задачка с интерфейсами   Найти похожие ветки 

 
КувалдаСофт   (2007-03-19 12:35) [0]

Бъюсь третий день подряд...
Значит такая вот проблемка
Есть некий набор классов реализация которых должна быть полностью скрыта, доступ через интерфейсы.
Есть общий интерфейс который служит какбы связкой этих классов, т.е. каждый класс реализует его и другие интерфейсы свои.
Есть фабрика которая создает объекты и возвращает их в виде базового общего интерфейса.
Всё вроде бы ровно и красиво, основная задача выполнена, а именно
классы скрыты, экземпляры создаются только через фабрику, классы имеют общий интерфейс.
Но возникает такая проблема - чтобы перейти от общего интерфейса к конкретному который и содержит методы класса нужно делать так
(IBase as IConcrete).SomeMetod;
где IBase - общий интерфейс
IConcrete - конкретный интерфейс класса с его фичами
SomeMetod - метод реализуемый в классе и объявленный в IConcrete
Согласитесь не красиво получается.
Хотелось бы иметь возможность сразу через точку получать список всех методов IConcrete.
но как это сделать ума не приложу. Уже были мысли в сторону реализации кода (IBase as IConcrete) в самом объекте или в общем интерфейсе, но тут опять грабли что возвращать, т.е. нужно получить объект как общий интерфейс и при этом иметь уже его конкретный интерфейс.
Надеюсь объяснил доступно.
Вопрос имеет прямое отношение к созданию игр поэтому разместил его здесь :)


 
Сергей М. ©   (2007-03-19 15:10) [1]


> Хотелось бы иметь возможность сразу через точку получать
> список всех методов IConcrete


1. IConcrete(IBase).SomeMethod

2.
var MyIConcrete: IConcrete;
..
    MyIConcrete := MyIBase;
    MyIConcrete.SomeMethod;


> Вопрос имеет прямое отношение к созданию игр поэтому разместил
> его здесь


Выдающаяся причинно-следственная связь !)


 
КувалдаСофт   (2007-03-19 15:20) [2]


> 1. IConcrete(IBase).SomeMethod
>
> 2.
> var MyIConcrete: IConcrete;
> ..
>     MyIConcrete := MyIBase;
>     MyIConcrete.SomeMethod;


так в этом то и дело, что не хотелось бы обращатся к IConcrete напрямую
т.е. так
var
  SomeObject : IBase;

SomeObject.SomeMethod; непосредственно
т.е. чтобы в списке методов компилятор выдавал методы IBase и IConcrete
сразу
возможно ли такое без явного приведения


 
Сергей М. ©   (2007-03-19 15:42) [3]


> возможно ли такое без явного приведения


Нет, невозможно.


 
КувалдаСофт   (2007-03-19 16:15) [4]


> Нет, невозможно.

ценю конкретные ответы :)
спасибо



Страницы: 1 вся ветка

Текущий архив: 2008.09.07;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
13-1120735770
WondeRu
2005-07-07 15:29
2008.09.07
Релизы SQL Server2005 и Visual Studio2005 анонсировны на 7 ноября


15-1216278139
vajo
2008-07-17 11:02
2008.09.07
Вопрос по обновлению конфигурации 1с8.1.


11-1190975644
Trible
2007-09-28 14:34
2008.09.07
Пример OnDrawCell


2-1217279177
Jolik
2008-07-29 01:06
2008.09.07
Использовать TForm как TFrame


3-1205310393
KPV-10k
2008-03-12 11:26
2008.09.07
Как узнать что запись захвачена другим пользователем (Firebird)