zoukankan      html  css  js  c++  java
  • D语言反射

            静态语言能不能使用反射呢? 在D语言这里可以肯定地告诉你,绝对是可以的。先来看几个程序:

    一、反射当然程序中使用到的模块与类型

            ModuleInfo* m1;
            int i1=0;
            foreach (m; ModuleInfo)
            {
                m1 = m;
                writeln(++i1, " modules : ", m1.name);
                TypeInfo_Class[] typeInfos = m1.localClasses;
                int i2=0;
                foreach(typeInfo;typeInfos)
                {
                    writeln("  -> ", ++i2 , " Type : ", typeInfo);
                }
            }

    image

    这是一个让人震惊的结果,模块与类型都显示出来了。

    二、使用类型名创建对象

    方法一:main.d

    import std.stdio;
    import std.traits;
    import std.format;
    import Utils;
    
    class ABC
    {
        public void PrintName()
        {
            writeln("Honan!!!");
        }
    }
    
    int main(string[] argv)
    {
        try
        {
            auto obj = Object.factory("main.ABC");
            writeln(typeid(obj));
            auto a = cast(ABC)obj;
            a.PrintName();
        }
        catch(Throwable e)
        {
            writeln(e.msg);
        }
        readln();
        return 0;
    }
    image

    方法二:main.d

    import std.stdio;
    import std.traits;
    import std.format;
    import Utils;
    
    class ABC
    {
        public void PrintName()
        {
            writeln("Honan!!!");
        }
    }
    
    int main(string[] argv)
    {
        try
        {
            auto typeInfo = TypeInfo_Class.find("main.ABC");
            auto obj = typeInfo.create();
            writeln(typeid(obj));
            auto a = cast(ABC)obj;
            a.PrintName();
        }
        catch(Throwable e)
        {
            writeln(e.msg);
        }
        readln();
        return 0;
    }

    image

    作者:宛宏南

  • 相关阅读:
    dp学习(六)
    dp学习(五)
    电子效应
    元素周期表
    铝、元素三角与焰色反应
    化学能与原电池:知识预习
    有机化学与生产生活
    乙烯和苯:知识预习
    有机物基础和甲烷:知识预习
    解析api的json
  • 原文地址:https://www.cnblogs.com/wanhongnan/p/5735217.html
Copyright © 2011-2022 走看看