Ключевое слово new
сообщает компилятору, что ваше определение скрывает определение, содержащееся в интерфейсах, которые может расширять ваш интерфейс.
Вы не можете указать ни конструктор, ни статический метод в интерфейсе ... что вы можете сделать, это добавить ограничение типа для параметра универсального типа, например
void Foo<T>() where T : new()
{
T t = new T();
// Do stuff with t
}
Это то, о чем ты думаешь?
Вы используете интерфейс, но, похоже, вам нужен базовый класс. Интерфейс никогда не должен нуждаться в конструкторе, поскольку он не может содержать никаких полей, которые должны были бы быть инициализированы в конструкторе. Я думаю, что вы хотите использовать базовый класс вместо этого.
C # и .NET не позволяют объявлять конструктор интерфейса.
Это просто обязательное ограничение реализации этого интерфейса (см. ISerializable в библиотеках .NET).
Если вы подумаете об этом, иметь конструктор в интерфейсе не имеет смысла, так как вы должны знать конкретный класс, который вы хотите создать, когда вызываете конструктор. Как бы вы вызвали такой конструктор интерфейса и каков был бы результат?