Non è possibile. I metodi di istanza sempre hanno la precedenza sui metodi di estensione, assumendo che siano applicabili. La risoluzione dei membri prenderà in considerazione solo i metodi di estensione una volta che non è riuscito a trovare un'opzione di metodo non di estensione.
Suggerisco di rinominare semplicemente il metodo, a meno che il punto fosse chiamare questo metodo in modo trasparente con il codice esistente.
Se hai fatto prendere un IList<T>
invece di List<T>
, è possibile creare un tipo di involucro che implementa IList<T>
e delegati di tutte le chiamate sulla lista avvolto, si svolgono operazioni in più, come si va. Potresti quindi anche scrivere un metodo di estensione a IList<T>
che ha creato il wrapper, il che consentirebbe in alcuni casi una sintassi più fluente. Personalmente preferisco l'approccio wrapper per derivare un nuovo tipo di raccolta, in quanto significa che puoi usarlo con le tue raccolte esistenti, rendendo le modifiche del codice potenzialmente più piccole ... ma tutto dipende da cosa stai cercando di fare.
fonte
2011-01-11 07:33:32
Anche se 'list.Add (" 3 ")' ha sovrascritto 'List.Add' e ha chiamato il metodo di estensione, dovresti aspettarti' list.Add (item) 'per fare lo stesso, ottenendo una ricorsione infinita. – Kobi
Vedo, la mia domanda è solo una questione di curiosità e fornisco un codice di esempio solo per mostrare quello che voglio, tuttavia hai ragione il ploymorphism –