X ++编辑器中是否有一个函数可以让你在实现后自动解压缩接口?
同样,Visual Studio中有这样一个函数,它通过为实现接口所需的所有方法提供方法存根来自动解压缩已实现的接口。
答案 0 :(得分:1)
不,没有这样的功能。
但你可以写一个。请参阅下面的示例代码
并将Action menu item
添加到\Menus\SysContextMenu
。
或者,您可以将方法添加到\Classes\EditorScripts
public static void main(Args _args)
{
#macrolib.AOT
SysContextMenuAOT menuAot;
TreeNode tn;
DictClass dc;
DictMethod dm;
int i, j;
str dmName;
str intSrc, intParams;
TreeNode itnRoot, itnChild;
if (!SysContextMenu::startedFrom(_args))
{
throw error(Error::wrongUseOfFunction(funcName()));
}
menuAot = _args.parmObject();
tn = menuAot.getFirstNode();
dc = new DictClass(className2Id(tn.AOTname()));
if (!dc)
{
throw error(Error::wrongUseOfFunction(funcName()));
}
for (i = 1; i <= dc.objectMethodCnt(); i++)
{
dm = dc.objectMethodObject(i);
dmName = dm.name();
if (dm.isStatic()
|| dm.isDelegate()
|| dm.accessSpecifier() != AccessSpecifier::public
|| dm.name() == identifierStr(classDeclaration)
)
{
continue;
}
if (!itnRoot)
{
itnRoot = TreeNode::findNode(#ClassesPath).AOTadd("I" + dc.name());
itnRoot.AOTsave();
itnChild = itnRoot.AOTfirstChild();
itnChild.AOTsetSource(strFmt('public interface I%1\n{\n}', dc.name()));
}
itnChild = itnRoot.AOTadd(dm.name());
intParams = '';
for (j = 1; j <= dm.parameterCnt(); j++)
{
if (j > 1)
{
intParams+= ', ';
}
intParams+= strFmt('%1 %2', extendedTypeId2DisplayName(dm.parameterType(j), dm.parameterId(j)), dm.parameterName(j));
}
intSrc = strFmt('public %1 %2(%3)\n{\n}', extendedTypeId2DisplayName(dm.returnType(), dm.returnId()), dm.name(), intParams);
itnChild.AOTsetSource(intSrc);
}
if (itnRoot)
{
itnRoot.AOTcompile();
itnRoot.AOTrestore();
itnRoot.AOTnewWindow();
itnRoot.AOTedit();
}
}