TCollection에 저장된 항목의 컬렉션을 가질 계획입니다.TCollectionItem의 상속
각 항목을 차례로 TCollectionItem은에서 파생 TBaseItem
에서 파생됩니다, 항목이 요청 될 때 컬렉션 TBaseItem
를 반환합니다 염두에두고
.
이제 각TBaseItem
는
Calculate
기능을 갖 상기
TBaseItem
이는 내부 변수를 반환하지만
TBaseItem
의 파생어들 각각에
Calculate
함수 파라미터의 다른 세트를 필요로한다.
는
컬렉션은 분명히이
내가이 일을 세 가지 방법을 생각할 수있는 각 함수에 올바른 매개 변수를 전달해야합니다, 각 Calculate
함수를 호출하는 컬렉션 항목을 반복하고 Calculate All
기능을 갖게됩니다
기본 클래스의 각 계산 함수에 대해 가상/추상 메서드를 만들고이를 생성 된 클래스에서 재정의합니다. 그러면 개체를 사용할 때 형식 변환이 필요하지 않지만 또한 많은 작업을 만들어야한다는 것을 의미합니다. 가상 메서드 및 대형 경우 .. .else 문은 형식을 감지하고 올바른 "calculate"메서드를 호출하므로 계산할 메서드를 호출하면 올바른 매개 변수를 사용하여 코드를 작성할 코드를 작성할 때 알 수 있으므로 오류가 발생하기 쉽습니다. Error/EAbstractError.
가능한 모든 매개 변수가있는 레코드 구조를 만들고이를 "calculate"함수의 매개 변수로 사용하십시오. 이것은 필요한 모든 매개 변수를 포함 할 수 있고 잠재적으로 매우 긴 매개 변수 목록을 피할 수 있기 때문에이를 "모두 계산"함수에 전달하는 추가 이점이 있습니다.
올바른 계산 방법에 액세스하려면 TBaseItem을 유형 변환하면됩니다. 이것은 TBaseItem을 첫 번째 메소드에 비해 꽤 정리할 수 있습니다.
이 컬렉션을 처리하는 가장 좋은 방법은 무엇입니까?
컬렉션은 실제로 다형성으로 사용하도록 설계되지 않았습니다. 기본 콜렉션 편집기는 항상 콜렉션의 생성자에 전달하는 유형 인 동일한 유형의 항목을 작성합니다. 양식 디자이너에서 컬렉션의 내용을 편집하지 않으려면 TCollection으로 시작하지 마십시오. TObjectList와 같은 다른 컨테이너 클래스 나 TObject의 직접적인 하위 클래스를 사용하십시오. –
TCollection을 다형 적으로 사용하는 데 문제가 없습니다. 문제는 다른 매개 변수를 다른 자손에서 동일한 메서드로 전달할 때 훨씬 더 중요했습니다. –