0

関数displayMenu()を持つクラスcMenuがあるとしましょう。この関数は、次のように、displayMenu() に渡される内容に応じて、サブメニュー クラスの静的関数init()を呼び出します。

cMenu.displayMenu('cMenuMain');

public class cMenu
{   
    public static function displayMenu(sMenu:String):void{

        switch(sMenu) {
            case 'cMenuMain':
                cMenuMain.init();
                break;
            case 'cMenuHighscore':
                cMenuHighscore.init();
                break;
        }

    }
}

public class cMenuMain
{   
    public static function init():void{
        trace('cMenuMain');
    }
}

私の質問:どうにかしてスイッチを回避し、sMenu の設定に応じてサブメニューの関数 init() を動的に呼び出すことはできますか? 何かのようなものeval(sMenu+'.init()');

ヒントをありがとう!

4

2 に答える 2

1

サブメニュー クラスが常に init メソッドを実装している場合 (インターフェイスを使用して確実に実装できます)、対象のサブメニュー クラスをパラメーターとして displayMenu メソッドに渡すことができます。

public static function displayMenu(submenuClass:*):void{
 // if you need to perform something here depending on the submenu class
 if (submenuClass is cMenuMain) {
  // do something
 } 
 submenuClass.init()
}

displayMenu(cMenuMain);
于 2013-04-21T10:47:29.570 に答える