Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2010, 12:49   #1
praeeo
 
Регистрация: 30.03.2010
Сообщений: 9
По умолчанию Приведение типов с одинаковыми свойствами

Приветствую!
Что-то не возьму в толк, как сделать "красиво":
Есть два типа объектов с одинаковыми свойствами, объекты заносятся в TObjectList.
Вопрос - как мне сделать приведение типов, не дублируя код со свойствами и не используя явное приведение? Вот пример:

Код:
procedure TSettForm.SetProperty (Prop, Str: string);
var
bufbtnlist: TObjectList;
begin
if (bufbtnlist.Items[iindex-1] as TObject).ClassName = 'TBtnProp' then
with (bufbtnlist.Items[iindex-1] as TBtnProp) do
begin
  if Prop = 'Hint' then Hint:= Str;
  if Prop = 'LeftURL' then LeftURL:= Str;
  if Prop = 'RightURL' then RightURL:= Str;
  if Prop = 'LeftHotKeys' then LeftHotKeys:= Str;
  if Prop = 'RightHotKeys' then RightHotKeys:= Str;
end;
if (bufbtnlist.Items[iindex-1] as TObject).ClassName = 'TMySpeedBtn' then
with (bufbtnlist.Items[iindex-1] as TMySpeedBtn) do
begin
  if Prop = 'Hint' then Hint:= Str;
  if Prop = 'LeftURL' then LeftURL:= Str;
  if Prop = 'RightURL' then RightURL:= Str;
  if Prop = 'LeftHotKeys' then LeftHotKeys:= Str;
  if Prop = 'RightHotKeys' then RightHotKeys:= Str;
end;
end;
praeeo вне форума Ответить с цитированием
Старый 21.12.2010, 13:53   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
if bufbtnlist.Items[iindex-1] is TBtnProp then
with TBtnProp(bufbtnlist.Items[iindex-1]) do
Это мне кажется самый короткий код
а зачем Fpfxtv "if Prop = 'Hint' then"? Что возможен вариант отсутствия свойства в объекте TBtnProp? Если TBtnProp и TMySpeedBtn имеют общего предка и обновляемые свойства в нем фигурирует, то возможен вариант обращения с типом предка
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 21.12.2010 в 14:06.
Аватар вне форума Ответить с цитированием
Старый 21.12.2010, 14:09   #3
praeeo
 
Регистрация: 30.03.2010
Сообщений: 9
По умолчанию

Ну да, хорошее указание) По поводу приведения типов - на другом форуме посоветовали наследоваться от общего предка. Вероятно, так и придется делать
praeeo вне форума Ответить с цитированием
Старый 21.12.2010, 14:14   #4
praeeo
 
Регистрация: 30.03.2010
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
if bufbtnlist.Items[iindex-1] is TBtnProp then
with TBtnProp(bufbtnlist.Items[iindex-1]) do
Это мне кажется самый короткий код
а зачем Fpfxtv "if Prop = 'Hint' then"? Что возможен вариант отсутствия свойства в объекте TBtnProp? Если TBtnProp и TMySpeedBtn имеют общего предка и обновляемые свойства в нем фигурирует, то возможен вариант обращения с типом предка
TBtnProp унаследован от TObject, в нем только 5 свойств (Hint,LeftURL,RightURL,LeftHotKeys, RightHotKeys). А TMySpeedBtn - от TSpeedButton. Просто добавлены те же свойства. Можно бы было TBtnProp наследовать и от TMySpeedBtn, но зачем мне лишние свойства и методы? Хотя, возможно, так и придется сделать.

Последний раз редактировалось praeeo; 21.12.2010 в 14:26.
praeeo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С - приведение типов onewho Общие вопросы C/C++ 3 21.11.2010 00:12
динамическое приведение типов в java sashonk Общие вопросы по Java, Java SE, Kotlin 13 28.08.2010 23:15
Приведение типов в Qt mike_tihomirov Qt и кроссплатформенное программирование С/С++ 1 19.06.2010 13:14
Приведение типов... В чем отличия? Gtx541 Общие вопросы C/C++ 1 16.06.2010 19:54
Приведение типов массива объектов Arnezami Общие вопросы .NET 3 17.12.2009 11:30