C # создает проблему с NVI, убирая множественное наследование. Хотя я думаю, что множественное наследование порождает больше зла, чем добра, это необходимо (в большинстве случаев) для NVI. Самое простое, что приходит на ум: класс в C # не может реализовать более одного NVI. Как только обнаруживается этот неприятный аспект тандема C # / NVI, становится намного легче отказаться от NVI, чем C #.
И, кстати, говоря о аспектах . Это очень интересная концепция, и ее цель точно такая же, как и у NVI, только она пытается взглянуть на «истинную суть» проблемы и решить ее, так сказать, «правильно». Взгляните .
А что касается .NET Framework, то для этого есть механизм: внедрить «ортогональный» код, так сказать, в основную логику. Я говорю обо всем этом бизнесе MarshalByRef / TransparentProxy, я уверен, что вы слышали об этом. Однако это серьезно влияет на производительность, так что здесь не повезло.
Были также многочисленные попытки реализовать ту же концепцию с помощью других технологий, от строительства фасадов до грязного бизнеса, упомянутого выше, до последующей обработки MSIL.
Последний подход действительно наиболее привлекателен для вас, поскольку его можно сделать прозрачным (путем включения необходимых шагов в процедуру сборки), он не влияет на производительность (больше, чем абсолютно необходимо для фактического выполнения «ортогональности». «код», и он не предполагает какого-либо «взлома» или обратного инжиниринга, поскольку MSIL открыт и хорошо документирован.
Здесь можно найти эти пункты, обсуждаемые более подробно, а также дополнительную информацию и ссылки на актуальные инструменты. Использование Google для той же цели также допустимо. : -)
Удачи.