I figured out I can dispatch my own events like this without extending:
public static const SHADE_ON:String = "SHADE_ON";
dispatchEvent(new Event(Shader.SHADE_ON));
and then somewhere else:
var sh:Shader = new Shader( 1, 0.8 );
sh.addEventListener(Shader.SHADE_ON, traceOn);
function traceon(e:Event = null):void {
trace("shade on");
}
so when do I need to extend?