Em C # genéricos, podemos declarar uma restrição para um parâmetro de tipo Tter um construtor padrão, dizendo where T : new(). No entanto, nenhum outro tipo de restrição como esse é válido - new(string)por exemplo, etc.
Do ponto de vista do design e / ou implementação da linguagem, qual o motivo disso?
Existe algo na maneira como os construtores trabalham ou na maneira como o sistema de tipos é implementado que proíbe isso (ou pelo menos dificulta)? Se assim for, o que é? Lembro-me de ler em algum lugar que default(T)realmente compila new T()para T : struct. Está relacionado a isso, talvez?
Ou é simplesmente uma decisão de design feita para evitar tornar a linguagem muito complicada?
new(string)não é uma restrição de construtor padrão. Sua pergunta equivale a dizer "Por que não existem restrições que exigem assinaturas específicas de construtores?" Muito provavelmente porque tal restrição não seria particularmente útil.