Sto lavorando al codice C # in cui un metodo statico di una classe base astratta viene sovrascritto dalla classe che eredita la classe base. Perché viene fatto questo? Ho pensato che solo un metodo virtuale di una classe base astratta dovrebbe essere sovrascritto. Quale scopo serve a rendere statico il metodo di base, o è il caso che ciò che sto incontrando è una pratica non ottimale o errata? Il codice è permesso dal compilatore.
La mia comprensione è che un metodo statico consente di chiamare il metodo senza che il tipo che comprende sia istanziato come oggetto. Ho usato solo metodi statici precedentemente in classi statiche e ho visto le classi astratte come semplicemente classi ereditabili che non dovrebbero essere istanziate. In questo caso, non mi aspetto che un metodo statico della classe astratta sia sovrascrivibile ma reso virtuale, in quanto un metodo virtuale potrebbe ancora contenere un'implementazione predefinita e penso che un metodo virtuale nasconda meglio i dettagli di implementazione.