Ci sono alcune linee guida di progettazione sul codice verificabile in "The Art of Unit Testing". Il primo è "Rendi i metodi virtuali di default". Sono curioso di conoscere la tua idea sul comportamento non virtuale di default in C #. Ho letto delle opinioni di Hejlsberg, ma penso che uno dei motivi più importanti potrebbe essere che potrebbe portarci al principio di "composizione sull'ereditarietà".
È possibile che "la composizione sull'ereditarietà" sia uno di quei motivi che rendono preferibile non-virtuale-per-predefinito rispetto a quello virtuale-per-predefinito?
Aggiorna
Riguardo a questo argomento, considera il punto di vista guidato dal test; dove vogliamo scrivere codice testabile. Mentre siamo incoraggiati a rendere tutti i membri virtuali per impostazione predefinita (al libro menzionato), possiamo seguire "la composizione sull'ereditarietà" e continuare ad essere non-virtuali per impostazione predefinita. Non è meglio?