다음과 같은 정의가 있습니다.익명 메소드를 저장하는 컨테이너
type
TOmniTaskDelegate = reference to procedure(const task: IOmniTask);
내가 TOmniTaskDelegate 인스턴스의 목록을 저장하기 위해 (D2009에서 지원한다)를 사용한다 컨테이너 어떤 종류의
? 현재 나는 array of TOmniTaskDelegate
을 사용하고 있습니다.
다음과 같은 정의가 있습니다.익명 메소드를 저장하는 컨테이너
type
TOmniTaskDelegate = reference to procedure(const task: IOmniTask);
내가 TOmniTaskDelegate 인스턴스의 목록을 저장하기 위해 (D2009에서 지원한다)를 사용한다 컨테이너 어떤 종류의
? 현재 나는 array of TOmniTaskDelegate
을 사용하고 있습니다.
TList<TOmniTaskDelegate>
을 사용합니다. generics 사용으로 인해 typesafe이므로 멤버의 평생 문제를 올바르게 처리합니다.
Generics.Collections의'TList
TObjectList는 익명 메소드 참조가 메소드에 대한 참조와 인터페이스의 "self"에 대한 참조를 포함해야하기 때문에 적절한 컨테이너가 아닙니다. 즉, 크기는 2 x SizeOf (포인터)입니다. –
@Cosmin 그건 바보 같은 실수 야. 물론'TList
편집 : 델파이 2009 일반 TList<T>
포함, 나는 그것이 바로 TList<T>
최적의 선택이 델파이 2010의 하나로서, array of
를 사용하여 구현했다고 가정하기로한다! 내 원래의 답변은 왜 array of
이 좋은 데이터 구조이고 왜 이 아니냐고 설명하기 때문에을 사용하면 많은 문제가 발생합니다.
array of Anonym
의 선택은 나에게 아주 좋은 보인다. 그들은 제대로 마무리되어야합니다.
구현을 위해 다른 것을 사용하는 경우 직접 참조를 마무리해야합니다. 예 : (: ZeroMemory 또는 FillChar하지 예) 그래서 컴파일러가 마무리 코드를 생성 할 수있는 기회를 얻을 수
귀하의 경우 기본 유형 (근본적인 새로운 유형의 목록)을 구현하고 있으며 제네릭 및 컴파일러가 절차를 엉망으로 만들지 않도록 신뢰할 수 있다고 생각하지 않습니다. 참조. ProcRef 배열 이외의 다른 것을 사용하려고한다면 TList
'array of'는 목록의 개인 구현에는 적합하지만 기본 데이터 유형으로 사용하지 않으려합니다. 'TList
왜 배열에 만족하지 않습니까? –
a) 잘 정의 된 인터페이스와 b)를 가진 컨테이너에 책임을 위임하고 싶기 때문에, 무언가를 추가 할 때마다 배열의 크기를 조정하기 때문에. 사실, 현재 크기와 할당 된 크기 등을 알 수있는 배열 주위에 멋진 래퍼를 쓸 수는 있지만, 이미 TSomeList를 다시 구현하고 있습니다. 델파이와 함께 제공되는 것을 사용하고 싶습니다. –
gabr
'TSomeList '이란 무엇입니까? 'TSomeList '를 사용할 수 없습니까? –