Текущий архив: 2003.05.26;
Скачать: CL | DM;
Вниз
доступ к структуре из разных классов? Найти похожие ветки
← →
User (2003-05-14 16:09) [0]Привет всем!
пишу свою библиотеку классов, проблема, есть некая структура и функция схожая для всех классов, как можно красиво выделить это все в отдельный класс так чтоб другие могли к нему достучатся, вернее где и как объявить и создать этот самый класс структуры, конечно можно было бы все впихать в какойнибудь родительский класс но тогда будет ненужное дублирование данных?
Спасибо.
← →
Digitman © (2003-05-14 16:15) [1]в раздел interface помести декларацию стуктуры и переменную ее типа, а так же ф-цию, которая будет работать с этой переменной
во всех модулях, в которых декларированы/реализованы заинтересованные классы, в uses укажи этот модуль
всех делов !
← →
Palladin © (2003-05-14 16:17) [2]
> конечно можно было бы все впихать в какойнибудь родительский
> класс но тогда будет ненужное дублирование данных
обоснуй
← →
User (2003-05-14 16:27) [3]
type
TParent = class
x0,y0 : Integer;
public
procedure Proc(x0,y0:Integer);
end;
type
TChild1 = class(TParent)
...
constructor Create;
...
end;
type
TChild2 = class(TParent)
...
constructor Create;
...
end;
...
constructor TChild1.Create;
begin
x0:=10;
y0:=10;
end;
constructor TChild2.Create;
begin
x0:=10;
y0:=10;
end;
...
тем не мение процедуру можно было бы использовать
← →
User (2003-05-14 16:29) [4]>Digitman
там не структура там класс, объявить та я его объявлю а где создать ? куда Creat ставить?
← →
Digitman © (2003-05-14 16:30) [5]
> User
и в результате у тебя какждый экземпляр-наследник класса TParent будет работать со своей областью памяти, распределенной под поля класса X0, Y0
← →
User (2003-05-14 16:38) [6]ну так и я отом же, это не вариант, объясни как достучатся из одного класса в другой
type
TStruct = class
x0,y0 : Integer;
public
procedure Proc(x0,y0:Integer);
end;
var
Struct : TStruct;
type
TmyClass = class
...
constructor Create;
...
end;
...
constructor TmyClass.Create;
begin
Struct.Proc(1,5); ??????? где его создать ????????
end;
...
← →
Digitman © (2003-05-14 16:45) [7]имеешь ввиду - где конструктор экз-ра TStruct вызвать ?
да где угодно !! хоть здесь же, в этом же модуле, в разделе initialization
← →
Serginio (2003-05-14 16:50) [8]Используй Интерфейсы
Например
Istruct=Interfase(IUnknown)
procedure Proc(x0,y0:Integer);stdcall;
end;
Если все объекты будут поддерживать данный интерфейс
TmyClass = class(TObject,Interfase)
...
constructor Create;
procedure Proc(x0,y0:Integer);stdcall;
...
end;
то можно вызвать
и вызываешь (myClass as Istruct).Proc(x0,y0:Integer)
или Istruct(myClass).Proc(x0,y0:Integer)
← →
Serginio (2003-05-14 16:52) [9]Ошибочка TmyClass = class(TObject,Istruct)
Данный способ очень широко используется в Net
← →
User (2003-05-14 17:04) [10]>Digitman
неужто так сложно пример черкнуть?
если бы все понимал так и не спрашивал наверно?
← →
Digitman © (2003-05-14 17:08) [11]initialization
Struct := TStruct.Create;
finalization
Struct.Free;
← →
Serginio (2003-05-14 17:11) [12]Создаешь в
Var Parent:TParent;
----
initialization
Parent:=TParent;
end;
И во всех объектах ссылаешься на Parent
← →
Тих (2003-05-14 20:39) [13]Вроде если я все правильно понимаю, человек хочет создать синглтон, т.е. экземпляр некоего класса, существующий всегда в единственном числе, и использовать указатель на оный как в родительском классе, так и его потомках? Верно, USER?
← →
User (2003-05-15 11:01) [14]Тих>
да, это должен быть некий класс содержащий некую информацию о структуре проекта и некие функции, при этом это все должно быть доступно другим классам, но я вроде разобрался с этим, правда появился ещё вопрос:
в функции класс-структура (синглтон) ведется обработка декскриптора формы откуда будут создаватся классы (структуры, родители, потомки), но в библиотеке понятное дело этого дескриптора ещё нет, он появится потом, как можно реализовать механизм последующего доступа?
← →
evvcom © (2003-05-15 11:13) [15]
> в функции класс-структура (синглтон) ведется обработка декскриптора
> формы откуда будут создаватся классы (структуры, родители,
> потомки), но в библиотеке понятное дело этого дескриптора
> ещё нет, он появится потом, как можно реализовать механизм
> последующего доступа?
Все так сложно написано. Если я правильно понял, то тебе поможет идея, которая реализована при создании форм в Application. Обрати внимание на Application.CreateForm
Страницы: 1 вся ветка
Текущий архив: 2003.05.26;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.02 c