배열 프로퍼티
배열 프로퍼티
배열 프로퍼티(array property)도 존재해요. 배열처럼 인덱스를 받는 프로퍼티예요. 인덱스는 1차원 또는 다차원일 수 있어요.
출처: Array properties
본문
일반(정적 또는 동적) 배열과 달리, 배열 프로퍼티의 인덱스는 서수형(ordinal type)일 필요가 없고 아무 타입이 될 수 있어요.
배열 프로퍼티의 read 지정자는 프로퍼티 타입과 같은 반환 타입을 가진 메서드 함수의 이름이에요. 함수는 인덱스 타입과 같은 타입의 변수를 단일 인자로 받아야 해요. 배열 프로퍼티에서는 필드를 read 지정자로 지정할 수 없어요.
배열 프로퍼티의 write 지정자는 인자 두 개를 받는 메서드 프로시저의 이름이에요. 첫 인자는 인덱스와 같은 타입, 두 번째 인자는 프로퍼티 타입과 같은 타입의 매개변수예요. 예시로 다음 선언을 볼게요.
Type
TIntList = Class
Private
Function GetInt (I : Longint) : longint;
Function GetAsString (A : String) : String;
Procedure SetInt (I : Longint; Value : Longint;);
Procedure SetAsString (A : String; Value : String);
Public
Property Items [i : Longint] : Longint Read GetInt
Write SetInt;
Property StrItems [S : String] : String Read GetAsString
Write SetAsstring;
end;
Var
AIntList : TIntList;
그러면 다음 문장들이 유효해요.
AIntList.Items[26] := 1;
AIntList.StrItems['twenty-five'] := 'zero';
WriteLn ('Item 26 : ',AIntList.Items[26]);
WriteLn ('Item 25 : ',AIntList.StrItems['twenty-five']);
반면 다음 문장들은 오류를 발생시켜요.
AIntList.Items['twenty-five'] := 1;
AIntList.StrItems[26] := 'zero';
인덱스 타입이 틀렸기 때문이에요.
배열 프로퍼티는 다차원일 수도 있어요.
Type
TGrid = Class
Private
Function GetCell (I,J : Longint) : String;
Procedure SetCell (I,J : Longint; Value : String);
Public
Property Cellcs [Row,Col : Longint] : String Read GetCell
Write SetCell;
end;
차원이 N개라면, getter와 setter의 첫 N개 인자의 타입은 배열 프로퍼티 정의의 N개 인덱스 지정자 타입과 일치해야 해요.
더 알아보기
- 프로퍼티 정의(Definition)
- 인덱스 프로퍼티(Indexed properties)
- 기본 프로퍼티(Default properties)