1

ActionScriptが共用体タイプをサポートしているかどうか知っていますか?たとえば、次のようなものです。

function foo(x:ClassA Union classB) {
  //x is classA or classB 
  //do something
}  

前もって感謝します

4

2 に答える 2

1

Actionscript 3は、c++スタイルのミックスインクラス階層をサポートしていません。

As3はむしろ、多くのオブジェクト指向言語で利用されているインターフェースアプローチを使用しています。

インターフェイスは通常、クラス階層に関して無関係なオブジェクト間の通信を可能にする機能の抽象的なテンプレートです。

そのような:

public interface IBox{ 
   function addContentToBox(contentName:String, content:*) Boolean;
   function boxHasContent(contentName:String): Boolean;
   function getContentFromBox(contentName:String): *;  
} 

as3でクラスを定義するときに、IBoxインターフェイスを実装する場合は、次のように記述します。

class YourClass extends anotherClass implements IBox {

(extends anotherClassは、別のクラスを拡張する場合にのみ必要です)

次に、 YourClassのIBoxで宣言された関数のコードを作成する必要があります。

では、キャッチは何ですか?さて、まず第一に

a = new YourClass(parameters etc);
if(a is YourClass)trace('YIPPE');
if(a is IBox)trace('YAY');

YIPPEYAYの痕跡があります。

(xxxはIBoxです)IBoxを実装するすべてのクラスのすべてのインスタンスに当てはまります。

IBoxを実装するクラスを持つ無関係なオブジェクトを、IBoxを期待する関数に渡すことができます。

詳細については、 Adobeas3インターフェイスドキュメントを参照してください。

これがお役に立てば幸いです。

于 2013-03-21T08:10:59.243 に答える
0

これに最も近いのは、基本クラスを作成し、そこから2つのクラスを派生させることAです。次に、またはインスタンスのいずれかを関数に渡すことができます。BCBCfoo

class classA {}

class classB extends classA {}

class classC extends classA {}

function foo(x:ClassA)
{
    if(x is classB)
        trace("x is classB");
    else if (x is classC)
        trace("x is classC");
}

var c:ClassC = new ClassC();

foo(c);

クラスのタイプをチェックし、それに基づいてコードを実行することはお勧めしませんが、インターフェイスを使用するとおそらく役に立ちますが、何をしようとしているのかを知る必要があります。

于 2013-03-21T03:23:48.033 に答える