Я пишу абстрактный синтаксический анализатор файлов (C#), который расширяется двумя конкретными синтаксическими анализаторами. Оба должны выполнить несколько проверок. В настоящее время в абстрактном синтаксическом анализаторе существует метод проверки достоверности, который использует отражение для вызова всех методов с именем, начинающимся с «теста». Таким образом, добавление проверок так же просто, как добавление метода с именем, которое начинается с «теста».Отражение или динамическая диспетчеризация
В последнее время у меня были некоторые комментарии об использовании отражения, и лучше использовать динамическую диспетчеризацию. Мой вопрос к вам, почему не использовать отражение и как бы вы это реализовали? Также как использовать динамическую отправку для решения этой проблемы?
public bool Validate()
{
bool combinedResult = true;
Type t = this.GetType();
MethodInfo[] mInfos = t.GetMethods();
foreach (MethodInfo m in mInfos)
{
if (m.Name.StartsWith("Check") && m.IsPublic)
{
combinedResult &= (bool)m.Invoke(this, null);
}
}
return combinedResult;
}
Определенно лучше остаться со стандартной практикой объектно-ориентированного программирования. Отражение весьма полезно, но не так эффективно, как стандартные вызовы функций. – Zoidberg
Кроме того, когда дело доходит до абстрактных деревьев синтаксиса (если вы используете их), посмотрите шаблон посетителя. – Zoidberg