delegate should be final