Pár dní späť som na jednom projekte potreboval vytvoriť svoje obľúbené Extension metódy, keď som pri ich použití narazil na jeden drobný problém. Konkrétne, po ich napísaní a pokusnom build-nutí projektu nič nepadlo, no intelli sense mi ich nad objektom neponúklo. Nuž, toto sa mi ešte nestalo, chvíľu som sedel a dumal, v čom je problém. A nebol ani taký zložitý, tradične.
Problém je ten, že extension metódy sú vlastne statické triedy so statickými metódami. A tieto triedy sú samozrejme v nejakom namespace (zvyčajne). Nuž ale tento namespace nemusí byť nutne rovnaký s namespace kde ich používate a teda :
- vytvoríte si ich v namespace rovnakom v akom ich chcete použiť,
- pridajte si namespace kde sú cez using
Takto môžete jednoducho obmedziť extension metódy napr na string objekte, aby sa vám nezobrazovali všade. Easy :)
PS: Vcelku podobný problém je v prípade, že chcete volať extension metódy Linq to Objects nad nejakou kolekciou a kde nič, tu nič. Opäť stačí pridať namespace System.Linq :) (zvyčajne je tento problém v nejakej custom triede, kde vám VS nedá defaultné using)