Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1362568388
Хыхы
2013-03-06 15:13
2013.07.28
Как быстро скопировать массив в другой?


2-1354043911
adept
2012-11-27 23:18
2013.07.28
Операции с данными в ячейках StringGrid а


15-1362342603
Юрий
2013-03-04 00:30
2013.07.28
С днем рождения ! 4 марта 2013 понедельник


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


15-1360736756
DevilDevil
2013-02-13 10:25
2013.07.28
Ребят, потестите пожалуйста





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский