특정 인터페이스 유형의 목록을 최종 사용자에게 제공하기 위해 여러 객체의 작은 인터페이스를 단일 TInterfaceList 'store'에 저장하므로 각 인터페이스는 'GetName'기능을 노출하지만 다른 모든 메소드는 해당 인터페이스 유형에 고유합니다. 예를 들어 여기에 두 개의 인터페이스는 다음과 같습니다Delphi TInterfaceList 내에 여러 인터페이스 유형을 저장하고 찾는 방법
IBase = interface
//----------------------------------------
function GetName : string;
//----------------------------------------
end;
IMeasureTemperature = interface(IBase)
//------------------------------------
function MeasureTemperature : double;
//----------------------------------------
end;
IMeasureHumidity = interface(IBase)
//----------------------------------------
function MeasureHumidity: double;
//----------------------------------------
end;
나는 하나의 TInterfaceList으로 이러한 인터페이스의 몇 가지 넣고 I (예 : 'IMeasureTemperature') 포인터의 또 다른 목록을 구축하는 특정 인터페이스 유형에 대한 목록을 검색하고 싶습니다 해당 인터페이스를 내보내는 객체에 전달합니다. 이러한 객체의 위치에 대한 가정을하지 않으려 고하며, 일부 객체는 여러 유형의 인터페이스를 내보낼 수 있습니다.
If FList[I] is TMeasureTemperature then ..
하지만 인터페이스 유형를 닮아 일을하고 싶습니다,이게 가능 : 나는 같은 것을 사용하여 클래스 계층이 할 수 알아? (당신이 초기화되지 메모리를 시도하지 않는 한) 그들은 꽤 안전,
var
oMTIntf: IMeasureTemperature;
...
If Supports(FList[I], IMeasureTemperature, oMTIntf) then ..
첫 번째 목록에 실제 인터페이스 * 유형 * 또는 해당 인터페이스를 구현하는 객체 * 인스턴스 *에 대한 참조가 포함되어 있는지 여부를 명확히 할 수 있습니다. 이전에 대해 이야기하기 위해 질문을 읽는 동안 여기에 응답하는 모든 사람들이 후자를 가정 한 것처럼 보입니다 ... 다시 인터페이스 형식 *을'TInterfaceList'에 저장할 수 없으므로 아마도 틀렸을 것입니다 ... –