zoukankan      html  css  js  c++  java
  • 用代码修改类名

    新创建一个类TestClass,用代码修改其类名为NewTestClass:

    static void ChangeClassName(Args _args)
    {
        #AOT
        TreeNode    treeNode 
    = TreeNode::findNode(#ClassesPath+'\\TestClass');
        ;
        treeNode.AOTsetProperty(
    "Name","NewTestClass");
        treeNode.AOTcompile(
    1);
        treeNode.AOTsave();
    }

    在运行到treeNode.AOTcomplile(1)时就报错说,"无效名称,类TestClass已经存在".由于类xCompilerOutPut的方法的源代码没有公开,所以不晓得它是怎么玩的。
    原因可能是由于AX的类有两个地方可以指定类名,Name属性,和类声明classDeclaration的类定义,AX4.0在修改Name属性的时候并没有修改类声明classDeclaration中的类定义,所以造成了错误。
    变通的做法是修改classDeclaration:
    static void ChangeClassName(Args _args)
    {
        #AOT
        TreeNode    treeNode 
    = TreeNode::findNode(#ClassesPath+'\\TestClass');
        ;
        treeNode 
    = treeNode.AOTfindChild("classDeclaration");
        treeNode.AOTsetSource(strreplace(treeNode.AOTgetSource(),
    "class TestClass","class NewTestClass"));
        treeNode.AOTcompile(
    1);
        treeNode.AOTsave();
    }

    这样倒是可以修改好。不过由于是使用了字符串替代,所以局限性比较大。
    在AX2009上试了下,已经把这个问题修复了,修改Name属性的同时会把类声明中的定义修改成新的类名。不知道它是怎么实现的。
  • 相关阅读:
    zjoj1706: [usaco2007 Nov]relays 奶牛接力跑
    bzoj1784: [Usaco2010 Jan]island
    [PKUSC2018]真实排名
    [PKUSC2018]主斗地
    回来了
    P4887 第十四分块(前体)
    P3604 美好的每一天
    Codeforces Round #660(CF1388)
    BOI2020 DAY2
    BZOJ 5281--[Usaco2018 Open]Talent Show(分数规划&单调队列&DP)
  • 原文地址:https://www.cnblogs.com/Farseer1215/p/1146496.html
Copyright © 2011-2022 走看看