Ну, вы можете сделать Titles структурой и сделать конструктор открытым или внутренним.Таким образом, каждый раз, когда клиент получает копию экземпляра Titles через свойство Title, он получает значение, а не ссылку.Они могут изменить это значение, но, чтобы применить это изменение к внутреннему состоянию вашего объекта, им потребуется иметь возможность снова установить значение через свойство Title.Они не могут, потому что у вас Установщик титров помечен как частный.
Вы должны будете сделать то же самое, когда вы измените значение внутренне.Например:
// Your constructor...
public Messenger()
{
Titles t = new Titles();
t.ForSuccesses = "blah";
Title = t;
}
Вы можете сделать это внутренне, потому что у вас есть доступ к закрытому установщику для свойства Title.
Основным недостатком является то, что это может запутать клиентов вашей платформы.немного, потому что похоже, что вы можете установить значения экземпляра Titles, но у них нет реального способа зафиксировать это изменение обратно в класс Messenger.