public HookAttribute(HookOrder order = HookOrder.NORMAL)
 {
     this.order = order;
 }
        protected internal void HookBase(Delegate callback, HookOrder order = HookOrder.NORMAL)
        {
            var plugin = callback.Target as BasePlugin;

            if (plugin == null) throw new ArgumentException ("Callback doesn't point to an instance method of class BasePlugin", "callback");

            HookBase (plugin, callback, order);
        }
 internal abstract void Replace(BasePlugin oldPlugin, BasePlugin newPlugin, Delegate callback, HookOrder order);
 protected internal abstract void HookBase(BasePlugin plugin, Delegate callback, HookOrder order = HookOrder.NORMAL);