Common to all rules is a public abstract Apply method, where the return type and arguments are specific to the rule type, which needs to be implemented by each new rule class.