У меня есть библиотека классов на C #, которая скомпилирована в dll. Можно ли что-то изменить в методе скомпилированного класса для конкретного проекта, не затрагивая исходный исходный код или не создавая новый класс по наследству?
Переопределение методов в скомпилированной библиотеке без наследования в C #
Ответы (6)
Технически возможно использовать переписывание кода с помощью техники, используемой такими фреймворками, как Moles. Однако я бы не рекомендовал это. Вместо этого вам будет лучше с классом-оболочкой, который делегирует вызовы содержащемуся объекту и переопределяет поведение, которое вам нужно, только для определенных методов, которые должны измениться.
Нет, по сути.
Как вы сказали, лучшим вариантом должно быть создание собственного класса и переопределение рассматриваемого метода (при условии, что он не запечатан).
Вы можете добавить в класс функциональные возможности, используя метод расширения.
Я так не думаю. Вы можете создать метод расширения, но у него не будет доступа к частным / защищенным / внутренним членам.
Если у вас есть исходный код, но вы не хотите его менять - разветвите его.
Если вас устраивает немного другая сигнатура метода, напишите метод расширения.
Если ничего из вышеперечисленного не работает для вас, и класс должен иметь то же имя, наследуйте от класса с тем же именем, переопределите и поместите класс в другое пространство имен. Отличайтесь от оригинала пространствами имен. Хотя обычное наследование, вероятно, будет проще поддерживать ...
Если ты все еще недоволен, я не могу тебе помочь.
Насколько мне известно, нет. Не могли бы вы подробнее рассказать о своем сценарии, почему вам нужно сделать что-то подобное?
С некоторым серьезным взломом, связанным с отражением и испусканием отражения в конечно, новый домен приложения. Но я сомневаюсь, что оно того стоит.