add virtual function to override in delegate