Реализация определенных правил смещения

Общим для всех правил является воздействие открытого абстрактного метода Apply, где возвращаемый тип и аргументы соответствуют типу правила, которое требуется реализовать каждым новым классом правил.