2013-02-12 4 views
1

Предположим, у меня есть несколько классов, которые простираются от MyAbstractClass, каждый из которых содержит свои собственные свойства, которых нет в MyAbstractClass. Как получить значение свойства из одного из этих классов?Получить значение свойства с помощью отражения

Что-то вроде этого: (псевдокод)

Method GetPropertyValue(myAbstractClass As MyAbstractClass) As %String 
{ 
    Set myPropertyValue = myAbstractClass.GetType().GetProperty("MyProperty").GetValue(); 
    Quit myPropertyValue 
} 

До сих пор у меня есть это:

Method GetPropertyValue(argBusinessObject As BusinessObject) 
{ 
    // get class name. 
    set className = argBusinessObject.%PackageName()_"."_argBusinessObject.%ClassName() 

    set dictionary = ##class(%Dictionary.ClassDefinition).%OpenId(className) 
    if (dictionary '= "") 
    { 
     for index=1:1:dictionary.Properties.Count() 
     { 
      #dim clsPropDef As %Dictionary.PropertyDefinition 
      // Get the property name from the class 
      set clsPropDef = dictionary.Properties.GetAt(index) 

      if (..PropertyName = clsPropDef.Name) {    
       // we have the property 
       // Set the propName so that it gets included 
       // now what? 
      } 
     } 
    } 
} 

ответ

1
Method GetPropertyValue(PropertyName) 
{ 
    Q $PROPERTY(##this,Name) 
} 

В older versions из кэша нужно использовать $ ZOBJPROPERTY вместо $ ЖИЛЬЯ. По-видимому, до версии 2010.1.

+0

который не компилируется для меня. –

+0

Упс, исправлено. Извините, позвонил, прежде чем я смог проверить это. – psr

+0

Это не доступно в моей версии кеша. Мне пришлось использовать $ ZOBJPROPERTY –

1

Вам не нужно вводить типы в кеш.

Если вам нужно, чтобы получить известное свойство, вы можете использовать обычный синтаксис:

Set myPropertyValue = myAbstractClass.MyProperty 

Если вам нужно, чтобы получить имущество, которое не известно, вы можете использовать функцию $ СОБСТВЕННОСТИ

Set myPropertyName = "PropertyNumber"_i 
Set myPropertyValue = $property(myAbstractClass,myPropertyName) 
Смежные вопросы