Я пытаюсь написать класс, который будет создавать неизменные копии другого класса, и для того, чтобы я это делал, требуется, чтобы копия брала дату и экземпляр оригинала в конструкторе.Я знаю, что вы не можете создать ограничение конструктора, которое задает параметры, но есть ли способ обойти его, используя контракты кода?
public class Copier<o, c>
where o : class, INotifyPropertyChanged
where c : class, c // ideally new(datetime, o)
{
private Dictionary<DateTime, c> copies;
public Copier(o original)
{
this.copies = new Dictionary<DateTime, c>();
original.PropertyChanged +=
this.propertyChangedHandler(object sender, PropertyChangedEventArgs args);
}
private void propertyChangedHandler(object sender, PropertyChangedEventArgs args)
{
var original = sender as o;
var now = DateTime.Now;
this.copies.Add(now, new c(now, original)); // error here
}
}
Предложения копирования созданы мной, наследуются от оригиналов,переопределите все свойства для чтения только и скопируйте значения из оригинала в конструкторе.
Примечание: существует требование (наложенное мной), что исходные объекты не могут быть изменены.