Extension metódy a ich namespace

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)
Publikované Wednesday, December 15, 2010 9:59 AM dudok
Zaradené do: ,

Komentáre

# re: Extension metódy a ich namespace

Tuesday, December 21, 2010 1:18 PM T

Riesenie je vcelku jednoduche ;-) nepouzivajte extension metody, je to ekvivalent helper statickych metod v helper statickej triede. Fluent sa da robit aj inak.

# re: Extension metódy a ich namespace

Wednesday, December 22, 2010 6:35 PM dudok

no vieš, ja som rád že prijali u nás v robote ako tak aspoň toto :))) o fluent ešte len snívam :)