ActionScript中的联合类型?

时间:2013-03-21 03:15:26

标签: actionscript-3 types

您知道ActionScript是否支持联合类型?例如,类似的东西:

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

提前致谢

2 个答案:

答案 0 :(得分:1)

Actionscript 3不支持c ++样式的mixin类层次结构。

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 {

(只有在扩展另一个类时才需要扩展anotherClass)

现在你必须为你的类 IBox 中声明的函数编写代码。

那捕获的是什么?好吧,首先

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

你现在有一丝YIPPE YAY。

对于实现IBox的所有类的所有实例,

(xxx是IBox)都是如此。

您可以将任何不相关的对象与实现IBox的类传递给期望IBox的函数。

有关详细信息,请参阅Adobe as3 interface document

我希望这会有所帮助。

答案 1 :(得分:0)

最接近你可以通过拥有一个基类A并从中BC派生两个类。然后,您可以将BC个实例传递给函数foo

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);

虽然我不建议检查类的类型并根据它来执行代码,但使用接口可能会帮助你,但我们需要知道你要做什么。