Я был бы склонен создать событие / делегат До и После и шлепать foo () в соответствующем месте, вероятно, там, где вы сейчас устанавливаете enumValue. Затем позвоните:
get {
BeforeDelegate();
// Do calcs
AfterDelegate();
}
Какое практическое применение? Зачем вам этот шаблон?
Sidenote: Если у меня есть геттер, выполняющий такую логику, я с большей вероятностью включу ее в метод. Это меньше шансов удивить людей. Методы намекают на то, что я, вероятно, что-то сделал под капотом, чтобы получить запрашиваемое вами значение, помимо простого представления скалярного значения.