Я пишу небольшую библиотеку, в которой я пишу некоторые интерфейсы, которые принимают объект MailMessage и возвращают мне класс с помощью одного метода send, который абстрагирует от способа отправки этого MailMessage. У меня есть контроль над классом, который будет выполнять фактическую отправку, но я не могу контролировать классы реализации стратегии. Я бы хотел, чтобы любые реализующие классы стратегии не изменяли MailMessage. Как я могу сделать MailMessage (и содержащиеся в нем коллекции) неизменными или создать его клон? Я не вижу метод .Clone в самом MailMessage, как в других классах. Придется ли мне приводить к созданию нового объекта MailMessage и выполнению установки свойства за свойством в этом новом MailMessage?
Обратите внимание, я в основном парень по Java и помогаю клиенту с кодом C # 2.0, поэтому я немного незнаком с идиомами C # / .NET для таких вещей. Любая помощь приветствуется.