2015-05-13 2 views
0

Я хочу (если это возможно), чтобы перечислить все строковые свойства в интерфейсе, который выглядит следующим образом:Как перечислить все свойства строки в интерфейсе?

IXMLDocumentSummaryType = interface(IXMLNode) 
    ['{AD394EAD-1253-4CA5-9F0A-76122CB53D88}'] 
    { Property Accessors } 
    function Get_Uid: UnicodeString; 
    function Get_RsUid: UnicodeString; 
    //etc 

    { Methods & Properties } 
    property Uid : UnicodeString read Get_Uid write Set_Uid; 
    property RsUid : UnicodeString read Get_RsUid write Set_RsUid; 
    property Meta : UnicodeString read Get_Meta write Set_Meta; 
    property Error : UnicodeString read Get_Error write Set_Error; 
    end; 

Есть много свойств текста и я заинтересован в только 43. Таким образом, у меня есть имя тех, 43 в статическом массиве.

Fields: array[0..42] of RSummary= (
     (Name: 'RsUid' ; Value: ''), 
     (Name: 'GbUid' ; Value: ''), 
     etc... 
    ); 

Теперь я хотел бы перечислить свойства и автоматически поместить значения этих свойств в массив. У меня есть Delphi XE7.

Я попытался это:

var 
    C: TRttiContext; 
    T: TRttiType; 
    F: TRttiField; 
    P: TRttiProperty; 
begin 
    T:= C.GetType(IXMLDocumentSummaryType) <----- not working 
+0

Какая версия Delphi? В последних версиях есть разные возможности RTTI, чем старые, поэтому версия имеет значение. –

+0

Delphi XE 7 (но ЕСЛИ возможно Delphi XE будет интересно также). – Ampere

+0

Вы не можете получить информацию о таких интерфейсах через RTTI. Вам нужен экземпляр класса, который реализует интерфейс. –

ответ

3

Интерфейсы свойства сильно отличаются от свойств класса. Интерфейс имеет только методы, а свойства - просто сахар.

Вы не получите RTTI для свойств интерфейса, потому что такого RTTI нет.

+0

Это отстой. К счастью, у меня уже есть назначение вручную для 43 «свойств». Поэтому, похоже, я буду придерживаться этого. Я надеюсь, что я смогу сделать код менее спагетти. – Ampere

+8

Вы можете перечислять функции, которые не имеют параметров, и возвращать строку и имена которых начинаются с «Get», что почти наверняка будет тем, что вам нужно. –

+0

Интересный образ мыслей. Это похоже на решение ... – Ampere

Смежные вопросы