有没有人能或多或少地提供一些真实的例子,说明你什么时候想要实际使用Event类的这两个方法?
因为3让我们在任何扩展Event的自定义类中覆盖这些方法,但我想知道为什么。
发布于 2011-08-20 15:44:47
toString -我只在调试消息中使用它,但在这些情况下,如果你不覆盖toString,那么你将不能返回事件的字符串表示。考虑以下示例,其中使用单个处理程序来捕获各种事件类型:
function handleEvents(evt:*):void
{
//trace the event type and all parameters including extra parameters from custom events
trace(evt.toString());
}
clone -如果需要重新分派事件,将调用事件类的clone方法。这将返回一个新的事件对象,并将目标重新分配给新的调度对象。问题是,如果不覆盖clone方法,clone将从定义它的最后一个类创建一个新的event对象,而不是从您的自定义event类创建。当您捕获重新调度的事件时,这很可能会导致类型错误。
发布于 2011-08-20 16:11:42
补充一下shanethehat的toString
解释,如果你不覆盖toString
并跟踪事件,它将总是打印通用Event
的默认信息,因为它是你的自定义事件的子类化。
重写toString
是用来调试的,所以它不是必要的,尽管它是鼓励的,特别是如果你正在分发你的API,与其他开发人员合作,或者只是想要写干净,一致的代码。
根据自定义事件中的属性数量,您可以创建一个switch语句,以便toString
只为每种类型返回适当的事件属性。下面是我的HistoryEvent类中的一个示例:
package com.mattie.events
{
//Imports
import flash.events.Event;
//Class
public class HistoryEvent extends Event
{
//Constants
public static const CHANGE:String = "change";
public static const STATUS:String = "status";
//Variables
public var action:String;
public var name:String;
public var data:Object;
public var undoable:Boolean;
public var undoableName:String;
public var redoable:Boolean;
public var redoableName:String;
public var index:uint;
//Constructor
public function HistoryEvent(type:String, action:String = null, name:String = null, data:Object = null, undoable:Boolean = false, undoableName:String = null, redoable:Boolean = false, redoableName:String = null, index:uint = 0)
{
super(type);
this.action = action;
this.name = name;
this.data = data;
this.undoable = undoable;
this.undoableName = undoableName;
this.redoable = redoable;
this.redoableName = redoableName;
this.index = index;
}
//Override clone
override public function clone():Event
{
return new HistoryEvent(type, action, name, data, undoable, undoableName, redoable, redoableName, index);
}
//Override toString
override public function toString():String
{
switch (type)
{
case CHANGE: return formatToString("HistoryEvent", "type", "action", "name", "data");
case STATUS: return formatToString("HistoryEvent", "type", "undoable", "undoableName", "redoable", "redoableName", "index");
default: return null;
}
}
}
}
发布于 2011-08-20 15:14:14
我从来没有重写过它们,只要有必要,我总是使用自定义事件?
https://stackoverflow.com/questions/7130048
复制相似问题