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

Вниз

Как объявить свойство с дополнительным параметром?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.008 c
15-1362508639
jack128_
2013-03-05 22:37
2013.07.28
Почему в дельфи не шаблоны, а дженерики?


15-1361513222
JohnKorsh
2013-02-22 10:07
2013.07.28
"Ненужные" COM порты.


15-1362384811
Pit
2013-03-04 12:13
2013.07.28
В ProcessExplorer видно,что DLL загружена 2 раза


15-1362291457
Ega23
2013-03-03 10:17
2013.07.28
Онлайн шутер посоветуйте?


3-1291295803
svb
2010-12-02 16:16
2013.07.28
Одна таблица или много маленьких