Форум: "Начинающим";
Текущий архив: 2013.07.28;
Скачать: [xml.tar.bz2];
ВнизКак объявить свойство с дополнительным параметром? Найти похожие ветки
← →
Abcdef123 (2012-11-28 07:37) [0]Здравствуйте, Мастера!
Прошу прощения за вопрос, скорее всего он примитивный, но я не знаю на него ответ.
Итак, обычно если надо в некоем классе объявить паблик проперти, то это делается так:
TmyClass=class
private
function GetCISSkinID: String;
procedure SetCISSkinID(const Value: String);
public
property CISSkinID: String read GetCISSkinID write SetCISSkinID;
end;
Но мне нужно работать со значением в зависимости от USERID, то есть было бы замечательно если б работало так:
TmyClass=class
private
function GetCISSkinID(AUserID: String): String; //взять значение из таблицы на конкретного пользователя
procedure SetCISSkinID(AUserID: String;const Value: String);//записать значение в таблицу на конкретного пользователя
public
property CISSkinID: String read GetCISSkinID write SetCISSkinID;
end;
Но, к сожалению, такая "грамматика" не проходит через компилятор. Помогите, плиз, как я могу реализовать такую вот задачку?
Заранее благодарна!
← →
Anatoly Podgoretsky © (2012-11-28 08:10) [1]> Abcdef123 (28.11.2012 07:37:00) [0]
Должно ругаться, если не проходит.
← →
sniknik © (2012-11-28 08:13) [2]> как я могу реализовать такую вот задачку?
это не задача, это ... ну не знаю, вот доехать из одного города в другой, довезти кого то, это задача. а проехать вот именно вот по этой колдобине... это блаж.
а как с таким свойством после работать? через запятую присваивать? это же не процедура, свойство...
либо еще одно свойство в класс - UserID, и тогда CISSkinID будет в зависимости от него, либо определить тип рекорд и свойство на него... задавать парой.
← →
Ega23 © (2012-11-28 08:16) [3]
> Но мне нужно работать со значением в зависимости от USERID,
> то есть было бы замечательно если б работало так:property CISSkinID[UserID: Integer]: String read GetCISSkinID write SetCISSkinID;
← →
Abcdef123 (2012-11-28 08:29) [4]To [1] Простите, в чем суть вашего комментария? Если Вы таким образом спрашиваете какую ошибку выдает компилятор - отвечаю: Incompatable types, указывая на строку
property CISSkinID: String read GetCISSkinID write SetCISSkinID;
Есть какие-нибудь идеи как реализовать такую вот задачку?
← →
Abcdef123 (2012-11-28 08:33) [5]To [3] UserID У меня не числовое :-( С типом строки можно как то прописать подобное тому, что вы написали?
← →
Abcdef123 (2012-11-28 08:41) [6]To [2] Да, я знаю, что можно так, как вы сказали (либо еще одно свойство в класс - UserID). Вероятно, что так я в конечном итоге и поступлю. Просто подумала, что может как то через проперти можно обе части сразу "обрабатывать". А могли бы вы пример прописать второй вариант - через тип рекорд, как это?
← →
Dimka Maslov © (2012-11-28 08:45) [7]
> У меня не числовое
Тип может быть любым. Хоть записью, хоть массивом
← →
Ega23 © (2012-11-28 08:57) [8]
> UserID У меня не числовое :-( С типом строки можно как
> то прописать подобное тому, что вы написали?
Можно.
← →
Ega23 © (2012-11-28 08:58) [9]Стоп!
Как это ID не числовое???
← →
O'ShinW © (2012-11-28 09:03) [10]
> Как это ID не числовое???
например, guid as string
← →
Ega23 © (2012-11-28 09:13) [11]
> например, guid as string
Ну неудобно же. Давай ещё IntToStr использовать, ага.
← →
O'ShinW © (2012-11-28 09:24) [12]
> Ну неудобно же
насчет удобства - без разницы
просто медленнее, обычно, чем int
← →
sniknik © (2012-11-28 09:31) [13]> Есть какие-нибудь идеи как реализовать такую вот задачку?
2 варианта привел в "комментарии", читать умеешь?
← →
sniknik © (2012-11-28 09:45) [14]> через тип рекорд, как это?
property CISSkinID: TGetCISSkinID read GetCISSkinID write SetCISSkinID;
← →
Плохиш © (2012-11-28 10:01) [15]
> Abcdef123 (28.11.12 08:33) [5]
> To [3] UserID У меня не числовое :-( С типом строки можно
> как то прописать подобное тому, что вы написали?
>
>
Вам нужен код для копи/паста? Тогда наймите программиста.
← →
sniknik © (2012-11-28 10:23) [16]вообще, ИМХО т.к. задача/логика не известна, неправильно объединять, правильнее в объекте держать дефаултного юзера, работать по нему, а в обработчиках свойств подымать эксепты если не задан..
← →
Abcdef123 (2012-11-28 11:17) [17]Исходя из написанного в [11], [12], [16] я решила остановиться на первом совете sniknik, объявлю UserID отдельно. Тем не менее большое спасибо Ega23 за [3] как приобретенное знание на будущее.
И также для себя (для расширения кругозора) хотела бы спросить sniknik пояснение To [14] A что представляет собой TGetCISSkinID, как прописать объявление этого типа?
Надеюсь на ответ по этому вопросу, и тему можно считать закрытой. Всем откликнувшимся большое спасибо!!!
← →
sniknik © (2012-11-28 11:26) [18]> A что представляет собой TGetCISSkinID
рекорд с полями, вообще любыми, а в по теме - AUserID и CISSkinID
← →
Sha © (2012-11-28 12:09) [19]
unit Unit1;
interface
type
TmyClass=class
private
FId, FValue: string;
function GetCISSkinID(const AUserID: string): string;
procedure SetCISSkinID(const AUserID, AValue: string);
public
property CISSkinID[const AUserID: string]: string read GetCISSkinID write SetCISSkinID;
end;
implementation
{ TmyClass }
function TmyClass.GetCISSkinID(const AUserID: string): string;
begin;
if AUserID=FId then Result:=FValue else Result:="IdNotFound";
end;
procedure TmyClass.SetCISSkinID(const AUserID, AValue: string);
begin;
FId:=AUserId;
FValue:=AValue;
end;
end.
//-------------
procedure TForm1.Button2Click(Sender: TObject);
var
my: TmyClass;
begin;
my:=TmyClass.Create;
my.CISSkinID["a"]:="aa";
Memo1.Lines.Add(my.CISSkinID["b"]);
Memo1.Lines.Add(my.CISSkinID["a"]);
my.Free;
end;
← →
han_malign (2012-11-28 13:25) [20]нахрена вообще property, если сериализация не предполагается и доступ на запись не обламывается - только ради семантики присваивания?
public
...
function GetCISSkinID(): string; overload;
function GetCISSkinID(out AUserID: string): string; overload;
function exchangeCISSkinID(out AUserID: string; const NewValue: string): string;
end;
← →
Sha © (2012-11-28 13:30) [21]> нахрена вообще property
желание ТС
← →
Плохиш © (2012-11-28 16:38) [22]
> han_malign (28.11.12 13:25) [20]
Проблема ветки не в том надо-не надо или можно-не можно, а в отсутствии у тс базовых знаний и, главное, отсутствии желания эти знания получить. Ибо эта тема прекрасно описана в справке с требуемыми тс примерами чуть ли не для копи/пасте.
← →
Юрий Зотов © (2012-11-28 22:24) [23]> Abcdef123
Это называется "индексированное свойство". В качестве индекса может использоваться и строка.
F1
TStrings
property Values[const Name: string]: string;
← →
DevilDevil © (2012-11-29 02:33) [24]> Abcdef123 (28.11.12 07:37)
всё-таки лучше такие задачи решать через property
удобнее пользоваться
как уже сказали:TmyClass=class
private
function GetCISSkinID(AUserID: String): String;
procedure SetCISSkinID(AUserID: String; const Value: String);
public
property CISSkinID[UserID: string]: String read GetCISSkinID write SetCISSkinID;
end;
если уж совсем по правильному, то указывая, что это константы :)TmyClass=class
private
function GetCISSkinID(const AUserID: String): String;
procedure SetCISSkinID(const AUserID: String; const Value: String);
public
property CISSkinID[const UserID: string]: String read GetCISSkinID write SetCISSkinID;
end;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.07.28;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.002 c