Non c'è alcuna ragione particolare per cui è stato scelto questo ordine. L'ordine scelto va da più generale a più specifico, che suppongo sia una proprietà ragionevolmente bella.
Per quanto riguarda la domanda "perché richiedere un ordine?", È semplicemente più semplice per i team di implementazione e testing avere un ordine chiaro e univoco imposto dalla lingua. Potremmo permettere che i vincoli vengano in qualsiasi ordine, ma che cosa ci compri?
Più lavoro su lingue e più sono dell'opinione che ogni volta che si concede all'utente una scelta, si dà loro l'opportunità di fare una scelta sbagliata. Un principio di progettazione di base di C# è che ti diciamo quando le cose sembrano sbagliate e ti costringono a renderle ragionevoli - che non è un principio di base del design, per esempio, di JavaScript. Il suo principio di base è "confusione e prova a fare ciò che l'utente intendeva". Inserendo più restrizioni sulla sintassi corretta in C#, è possibile garantire che la semantica prevista sia espressa correttamente nel programma.
Per esempio, se io fossi la progettazione di un linguaggio C# -come oggi non c'è modo che avrei dovuto sintassi ambigue come:
class C : X , Y
o
... where T : X, Y
Y è chiaramente destinato ad essere un'interfaccia È X? Non possiamo dire sintatticamente se X fosse inteso come un'interfaccia o una classe. Basti dire che questa ambiguità complica molto le cose come il rilevamento dei cicli nei tipi di base e nelle interfacce e così via. Sarebbe molto più facile per tutti se fosse più verboso, come lo è in VB.
fonte
2011-12-15 15:54:03
Come sfondo, la specifica della lingua stabilisce che i vincoli devono essere nel vincolo di ordine * primario, vincolo secondario, vincolo di costruttore *, dove un * vincolo primario * è semplicemente * class * o * struct *, un * vincolo secondario * è una determinata interfaccia o tipo di classe, e il * constructor constraint * è semplicemente il * new() *. Per quanto riguarda il motivo per cui sono classificati come tali e richiedono quell'ordine, non ne ho idea. Forse le specifiche del linguaggio annotate farebbero luce su di esso? –
Interessante, grazie. È il motivo per cui sono particolarmente interessato. –