Я представляю себе, что вы хотите создать своего рода контекст или механизм выполнения и что эти объекты, используемые механизмом, должны быть в общем случае переданы в механизм. Как только двигатель завладеет объектом, ему нужно выяснить, что делать с объектом ...
Предполагая, что это правильно, вы можете использовать наследование для наследования от базового класса, например, FrameworkObject, или вы можете реализовать общий интерфейс, например IFrameworkObject. Вы можете использовать интерфейс как не что иное, как полиморфный «маркерный» интерфейс. Это было необходимо при программировании компонентов ActiveX в тот же день. Я предпочитаю интерфейс маркера, потому что наследование классов не является чем-то тривиальным с точки зрения жизненного цикла рефакторинга фреймворка, и он может иметь тенденцию создавать код с ошибками из-за раздувания базового класса, так как добавляются некоторые функции, но не все, производные классы нужны.
Если у вас есть общий механизм, т. Е. Контейнер типа через реализацию интерфейса для каждого из классов, вы можете использовать отражение или, возможно, просто оператор "is" (в C #), чтобы выяснить, реализует ли конкретный объект конкретный интерфейс, который относится, например, к объекту File или к приложению.
После того, как вы определите контекст выполнения с помощью идентификации интерфейса (не обманывайте себя, что вы сможете сделать это на уровне детализации метода), следующее решение - попытаться ли использовать рефлексию и жестко запрограммированную логику для выполнения различные методы. Если вы хотите сделать его чрезвычайно общим, вы можете полагаться на метаданные, которые хранятся в файлах или в базе данных, чтобы управлять логикой. Например, механизм выполнения может загрузить поддерживаемые интерфейсы при запуске и затем использовать отражение для опроса любого объекта, который реализует интерфейс IFrameworkObject.
Чем больше я об этом думаю, тем больше я чувствую, что ваши требования предполагают, что вы реализуете своего рода язык сценариев, и эта часть требований заключается в токенизации команд с помощью лексического анализа.