zoukankan      html  css  js  c++  java
  • Unity5.x在WP8.1中无法使用Reflection API的解决方法

    下班前随便写点,虽然花了不少时间但是最终得到的解决方法还是比较简单的。

    第一种方法:使用WinRTLegacy.dll中的类。这个dll在生成的WP project中是自带的无需在unity工程中添加,但是这个带来的问题就是调试代码的时候不方便,因为你不放到项目中在VS的工程中就没有这个dll,对于调试代码和VS的自动补全功能影响很大。

    废话不多说,用几个例子来说明用法:

    #if NETFX_CORE
                foreach (PropertyInfo p_info in TypeExtensions.GetPublicInstanceProperties(type))
    #else
                foreach (PropertyInfo p_info in type.GetProperties())
    #endif
    
    #if NETFX_CORE
            PropertyInfo[] proinfos = Unity.Partial.System.Type.GetProperties(srcObj.GetType(), m_bindingAttr);
    #else
            PropertyInfo[] proinfos = srcObj.GetType().GetProperties(m_bindingAttr);
    #endif
    

     TypeExtensions算是Unity对WP8.1的.NET Core中移除Reflection API的补充,方法算是比较全但是和原有的Type类中的方法比仍旧有很多不足,好在还有另一个类Unity.Partial.System.Type来补充。

    #if NETFX_CORE
                foreach (FieldInfo f_info in Unity.Partial.System.Type.GetFields(type))
    #else
                foreach (FieldInfo f_info in type.GetFields())
    #endif
    

    这两个类都是在同一个dll中的,用object Browser来看这个dll真心有点乱。用这两个类协作就可以解决大多数的Reflection API的问题。

    第二种方法:使用类似GetRuntimeMethods这样的runtime方法

    IEnumerable<MethodInfo> methods = type.GetRuntimeMethods();
    

    同样在object Browser中可以发现有大量的方法名中带Runtime的方法,这些方法在WP8.1下有效。  

    PS: 宏NETFX_CORE无需在unity工程中定义,在生成的WP project中自带。

     
     
  • 相关阅读:
    ClientDataSet 心得
    TClientDataSet中关于TField、TFieldDef动态创立字段的应用
    Delphi CxGrid 汇总(4)
    Delphi CxGrid 汇总(3)
    Delphi CxGrid 汇总(2)
    Delphi cxGrid使用汇总(一)
    修改后的SQL分页存储过程,利用2分法,支持排序
    字符串操作之格式化
    关于 cxGrid 的过滤问题
    cxGrid实现取消过滤和排序后定位到首行(单选和多选)
  • 原文地址:https://www.cnblogs.com/klkucan/p/5383708.html
Copyright © 2011-2022 走看看