Страница 1 из 1
Свойства (properties)
Добавлено: 28.05.2010 23:26:55
runewalsh
В идеальном языке стоит довести их до ума.
Например, свойства-массивы, которые почему-то нельзя напрямую связывать с полями-массивами. Равно как и индексированные свойства, которые не умеют обращаться к тем же полям-массивам с использованием индекса. Следующий финт ушами не скомпилируется, хотя в случае, когда сеттер/геттер не нужны, наверняка будет более удобным.
Код: Выделить всё
type
cTestClass = class
private
_arr : array[ 1 .. 10 ] of integer;
public
property SomeArray[ i : integer ] : integer read _arr write _arr; default;
property Value2 : integer index 2 read _arr write _arr;
end;
Re: Свойства (properties)
Добавлено: 30.05.2010 21:07:18
hinst
а по-моему, это лишнее. введение всё новых наворотов приближает паскаль к аццкому си.
тут не ясно, что будет, если обратиться к элементу #100, не ясно, как получить количество элементов, т.к. это нарушит инкапсуляцию
а это просто лишнее. фича index в свойствах также имхо лишняя и загрязняет синтаксис.
в крайнем случае мне представляется возможным, может быть, оправданным, сделать так
Код: Выделить всё
type
cTestClass = class
private
_arr : array[ 1 .. 10 ] of integer;
public
property SomeArray: array[ 1 .. 10 ] of integer; read _arr write _arr; default;
end;
да и то смотрится как-то
не очень.

Re: Свойства (properties)
Добавлено: 30.05.2010 23:44:26
Timid
Ну н..х..ра, спрашивается, вы изобретаете разные велосипеды и грабли, если объектный Паскаль придуман для того, чтобы Вы описывали необходимые форматы данных типами?
Напишите:
Код: Выделить всё
type
TMyFixedIntegerArray=array [1..10] of integer;
и подставляйте его в код.
Re: Свойства (properties)
Добавлено: 01.06.2010 09:22:06
runewalsh
Действительно, можно сделать так:
Код: Выделить всё
type
tArrayOfIntegers = array of integer;
cListOfIntegers = class
private
_count : integer;
_list : tArrayOfIntegers;
procedure _SetCount( newCount : integer );
public
property List : tArrayOfIntegers read _list write _list;
property Count : integer read _count write _SetCount;
end;
Не всегда удобно, что List не считается свойством-массивом, то есть не может быть default, но это не страшно. Суть в другом: если для List вдруг понадобятся сеттер или геттер, они будут чем-то аццким.
hinst писал(а):тут не ясно, что будет, если обратиться к элементу #100
Стандартный Range check error во время отладки. Конечно, лучше бросать исключение, но вообще-то производительность может быть важнее, если это, например, список индексов рисуемых мешей и обновляется каждый кадр. По-моему, решение из первого поста выглядит симпатичнее.
Re: Свойства (properties)
Добавлено: 01.06.2010 12:25:05
Timid
Если вы работаете с индексами вершин, то вам однозначно нужен статический массив. И никаких объектов.
Используйте record вместо class.
Re: Свойства (properties)
Добавлено: 19.12.2014 21:13:16
sabakanwal
Привет всем.
Есть ли в природе аналоги программы Dcu2Pas (для Delphi), но только для FreePascal?
_________________________________________
Unlock the key of your success by
650-987 - certkiller study material, you can easily pass
640-692 - braindumps - exam and
Keiser University exam.