Форум: "Основная";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];
ВнизКак лучше всего организовать что-то вроде общего свойства для Найти похожие ветки
← →
miwa © (2004-07-08 22:43) [0]всех объектов данного класса? Другими словами, в проектируемом классе аж выпирает одно, общее для всех свойство. Тоесть, значение у него будет общим для всех. Ну а поскольку это стринг, а объекты будут мерятся тысячами, то хотелось бы поэлегантнее секономить пару килобайт :о).
← →
Гаврила © (2004-07-08 22:44) [1]через глобальную переменную
← →
KilkennyCat © (2004-07-08 22:46) [2]Если значение общее для всех... то может, вынести его вообще за пределы данного класса? И в дальнейшем просто помнить, что у этого объекта есть недокументированный стринг с таким-то содержимым...
← →
miwa © (2004-07-08 22:50) [3]
> через глобальную переменную
А поэлегантнее низзя?
> у этого объекта есть недокументированный стринг
Хэх... Не люблю я недокументированные возможности ;о)
Так что - нету "законных" методов? Тоесть, способов ;о).
← →
Palladin © (2004-07-08 22:52) [4]Читаем (где угодно) о наследовании...
← →
Palladin © (2004-07-08 22:53) [5]Фу... значение оказывается общее...
Const
CommonValueForSimpleClass=17;
← →
miwa © (2004-07-08 22:57) [6]А если оно не const - тогда, естессно, var? И оно не будет создаваться заново каждый раз при вызове конструктора?
← →
Palladin © (2004-07-08 23:07) [7]Зачем тебе его создавать если оно постоянное?
← →
Гаврила © (2004-07-08 23:23) [8]Ну нет у нас в паскале статических членов, нет.Только глоб. переменные. Под Implementation, чтоб снаружи видно не было.
Свойство на чтение и на запись обращается не к полю класса, а к глоб. переменной.
← →
miwa © (2004-07-08 23:31) [9]
> Зачем тебе его создавать если оно постоянное?
Да не постоянное оно, а одиноковое для всех. И если изменится - то тоже сразу для всех.
> Ну нет у нас в паскале статических членов, нет.Только глоб.
> переменные.
Дык а я об чем. Я и спрашиваю - как это сделать правильно?
> Под Implementation, чтоб снаружи видно не было.
А вот как раз очень хорошо, если б было видно.
Нет, лучше сделаем так. Вот такой код:
type
tmyclass = class
procedure SomeMethod;
end;
implementation
var
globalvar: string;
procedure tmylcass.SomeMethod;
begin
globalvar:="some value";
end;
Это правильно?
globalvar не будет плодится для каждого объекта?
← →
Гаврила © (2004-07-09 00:11) [10]
> globalvar не будет плодится для каждого объекта?
Не будет
← →
miwa © (2004-07-09 00:40) [11]Вот и чудненько.
Всем ответившим спасибо.
← →
Amoeba © (2004-07-09 11:13) [12]Не плохо! Понадобилось еще дополнительных 9 постов, чтобы до автора вопроса дошел данный первым правильный ответ.
← →
Digitman © (2004-07-09 11:20) [13]
> miwa © (09.07.04 00:40) [11]
чудненько-то чудненько, только вот в такой реализации объекты твоего чудненького класса не будут потокобезопасны как минимум в части мультипоточного вызова Somemethod() ... синхронизация мультипоточного доступа к globalvar напрочь отсутствует
← →
REA © (2004-07-09 11:26) [14]threadvar, но он про это не спрашивал
← →
КаПиБаРа © (2004-07-09 12:07) [15]
> чудненько-то чудненько, только вот в такой реализации объекты
> твоего чудненького класса не будут потокобезопасны
VCL тоже потоконебезопасна, однако никто еще от этого не умер.
← →
Digitman © (2004-07-09 12:13) [16]
> REA © (09.07.04 11:26) [14]
> threadvar, но он про это не спрашивал
threadvar к сабжу не имеет отношения - из другой оперы это
> КаПиБаРа © (09.07.04 12:07) [15]
> VCL тоже потоконебезопасна, однако никто еще от этого не
> умер.
мое дело - предупредить
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.038 c