如何使用反射从类中检索属性

亚历克斯·科威尼

我想创建一个将应用于classDeclarations的自定义属性。我可以枚举类中其他方法的属性,但不能枚举classDeclaration本身,因为它是某种特殊方法

我知道这是有可能的,因为SysObsoleteAttribute(从内核调用)始终放置在classDeclarations中。

在此,Classes\CustCustomerService\create我只是将属性复制Classes\CustCustomerService\classDeclaration到此测试的顶部。

[AifDocumentCreateAttribute, SysEntryPointAttribute(true)]
class CustCustomerService extends AifDocumentService
{

}

我在新类上创建了一个静态方法:

static public void AttribsOfSysEntryPointAttributeOnMethod
            (
            str _sNameOfClass,
            str _sNameOfMethod,
            str _nameOfAttribute
            )
{
    int nClassId;

    SysDictMethod       sdm;
    Object attributeAsObject;
    SysDictClass            sysDictClass;

    Array                   attribArray = new Array(Types::Class);
    int i;

    nClassId = Global::className2Id(_sNameOfClass);

    sysDictClass    = new SysDictClass(nClassId);

    sdm = new SysDictMethod(UtilElementType::ClassInstanceMethod, nClassId, _sNameOfMethod);

    attribArray = sdm.getAllAttributes();

    if (attribArray)
    {
        for (i=1; i<=attribArray.lastIndex(); i++)
        {
            attributeAsObject = attribArray.value(i);

            info(strFmt("[%3] Attrib Class Id: %1 [%2]", classIdGet(attributeAsObject), classId2Name(classIdGet(attributeAsObject)), _sNameOfMethod));

        }
    }
    else
    {
        // Unable to get attributes, try another way
        error(strFmt("Unable to retrieve attribute array for method %1", sdm.name()));

        // It is, so let's try and enumerate ALL attributes and output them directly from class dec
        sdm = sysDictClass.objectMethodObject(1);

        if (attribArray)
        {
            for (i=1; i<=attribArray.lastIndex(); i++)
            {
                attributeAsObject = attribArray.value(i);

                info(strFmt("[%3] Attrib Class Id: %1 [%2]", classIdGet(attributeAsObject), classId2Name(classIdGet(attributeAsObject)), _sNameOfMethod));

            }
        }
        else
            error(strFmt("Still unable to retrieve attribute array for method %1", sysDictClass.objectMethod(1)));
    }
}

然后创建一个作业来调用它,您可以看到它对一种方法的工作原理,而对另一种方法却没有。

static void Job5(Args _args)
{        
    AttributeReflection::AttribsOfSysEntryPointAttributeOnMethod("CustCustomerService", "create", "SysEntryPointAttribute");
    AttributeReflection::AttribsOfSysEntryPointAttributeOnMethod("CustCustomerService", "classDeclaration", "SysEntryPointAttribute");

}

任何想法如何从classDeclaration枚举属性?

扬·B·凯德森

classDeclaration不是方法,不能被调用。因此,您的sysDictClass变量为null。

谷歌搜索显示该getAllAttributes方法在DictClass以下位置退出

attribArray = sdm ? sdm.getAllAttributes() : sysDictClass.getAllAttributes();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用反射将对象添加到类的实例的泛型列表属性中

来自分类Dev

如何忽略使用反射继承的类的所有隐藏属性?

来自分类Dev

如何在WinRT中使用反射获取类的静态属性

来自分类Dev

使用反射检索对象的类名

来自分类Dev

使用反射在谓词中引用类的属性

来自分类Dev

如何从 Dart 中的类列表中检索属性?

来自分类Dev

如何使用反射从字段/类中获取对象?

来自分类Dev

使用反射从列表中检索值

来自分类Dev

使用反射按顺序获取类的属性

来自分类Dev

如何使用 C# 反射获取实例化的属性或非 null 的类类型的属性

来自分类Dev

如何使用 selenium webdriver 检索类内反应元素的属性?

来自分类Dev

如何在没有反射的情况下确定Java中泛型属性的类类型?

来自分类Dev

如何使用反射或解析读取Python类中声明成员的顺序(禁止使用元类替换)?

来自分类Dev

如何使用反射从外部JAR文件中检索一些资源

来自分类Dev

如何在运行时使用反射从类的对象获取属性的值

来自分类Dev

使用反射在结构和类之间的等效属性中复制

来自分类Dev

使用反射将类中的所有静态属性作为对象获取VB.NET

来自分类Dev

使用反射获取类内列表属性的count属性值

来自分类Dev

使用反射检查类中的集合

来自分类Dev

如何使用反射设置此对象的属性?

来自分类Dev

如何使用反射递归获取类型的属性?

来自分类Dev

如何使用 Kotlin 反射设置 val 属性?

来自分类Dev

检索存储在字典中的类实例的属性

来自分类Dev

检索存储在字典中的类实例的属性

来自分类Dev

如何使用“路径元组”从嵌套属性中检索类型

来自分类Dev

使用反射设置Objective-C类的属性值

来自分类Dev

使用反射从父类获取自己的属性名称

来自分类Dev

使用反射获取继承接口的类的属性

来自分类Dev

序列化使用反射填充其属性的类

Related 相关文章

  1. 1

    如何使用反射将对象添加到类的实例的泛型列表属性中

  2. 2

    如何忽略使用反射继承的类的所有隐藏属性?

  3. 3

    如何在WinRT中使用反射获取类的静态属性

  4. 4

    使用反射检索对象的类名

  5. 5

    使用反射在谓词中引用类的属性

  6. 6

    如何从 Dart 中的类列表中检索属性?

  7. 7

    如何使用反射从字段/类中获取对象?

  8. 8

    使用反射从列表中检索值

  9. 9

    使用反射按顺序获取类的属性

  10. 10

    如何使用 C# 反射获取实例化的属性或非 null 的类类型的属性

  11. 11

    如何使用 selenium webdriver 检索类内反应元素的属性?

  12. 12

    如何在没有反射的情况下确定Java中泛型属性的类类型?

  13. 13

    如何使用反射或解析读取Python类中声明成员的顺序(禁止使用元类替换)?

  14. 14

    如何使用反射从外部JAR文件中检索一些资源

  15. 15

    如何在运行时使用反射从类的对象获取属性的值

  16. 16

    使用反射在结构和类之间的等效属性中复制

  17. 17

    使用反射将类中的所有静态属性作为对象获取VB.NET

  18. 18

    使用反射获取类内列表属性的count属性值

  19. 19

    使用反射检查类中的集合

  20. 20

    如何使用反射设置此对象的属性?

  21. 21

    如何使用反射递归获取类型的属性?

  22. 22

    如何使用 Kotlin 反射设置 val 属性?

  23. 23

    检索存储在字典中的类实例的属性

  24. 24

    检索存储在字典中的类实例的属性

  25. 25

    如何使用“路径元组”从嵌套属性中检索类型

  26. 26

    使用反射设置Objective-C类的属性值

  27. 27

    使用反射从父类获取自己的属性名称

  28. 28

    使用反射获取继承接口的类的属性

  29. 29

    序列化使用反射填充其属性的类

热门标签

归档