Em C # genéricos, podemos declarar uma restrição para um parâmetro de tipo T
ter 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.