Я знаю, что интерфейсы не могут определять конструкторы. Вот что я хотел бы сделать:
public interface SavableObject {
void Save(ObjectSaver saver);
SavableObject(ObjectLoader loader); //This, obviously, doesn't work
}
//Loading an object inside ObjectLoader:
T LoadObject<T>() where T : SavableObject {
return (T)Activator.CreateInstance(typeof(T), this);
}
И я мог бы сделать это, если бы я вынул строку, которая не работала, и была бы просто ошибка времени выполнения при попытке загрузить (или, возможно, сохранить, если я положил утверждение там) объект, если нет конструктора. Мне просто интересно, есть ли способ требовать, чтобы класс имел определенный конструктор, который можно использовать с Активатором. Могу ли я как-то использовать пользовательский атрибут и требовать, чтобы этот атрибут был в классе? Или я должен полагаться на проверки во время выполнения для загрузки и сохранения данных?
Я знаю, что мог бы иметь конструктор без параметров и метод Load(ObjectLoader)
, но я не обязательно хочу иметь конструктор без параметров, доступный для злоупотребления для других целей.