Deşi tema a mai fost abordată (şi chiar pe acest board), aş vrea să punctez şi eu (poate cu o prea mare întârziere) existenţa unei modalităţi în C# 3.0 de a extinde funcţionalitatea unei clase. Ce mi se pare cu adevărat interesant (şi nu văd punctat acest lucru în articolul lui Alex Ghiondea spre care am făcut trimitere în linkul de mai sus) e că se pot extinde şi tipuri definite în CLR.
De exemplu, imaginaţi-vă că lucraţi la un proiect în care folosiţi intensiv stringuri. Mai mult, pentru voi e important ca aceste stringuri să reprezinte date. În mod normal poate aţi fi tentaţi să folosiţi o metodă care verifică dacă stringul este în formatul corect.
class Program
{
static void Main(string[] args)
{
string corDate = "01/01/2008";
string wroDate = "20091/112/112";
Console.WriteLine(isDate(corDate));
Console.WriteLine(isDate(wroDate));
}
public static bool isDate(string s)
{
Regex dateRegex = new Regex(@"^\d{1,2}\/\d{1,2}\/\d{2,4}$");
return (dateRegex.IsMatch(s)) ? true : false;
}
}
Cum e şi de aşteptat, rezultatul este:
True
False
Press any key to continue . . .
Dar hai să folosim şi noua funcţionalitate. Vom încerca să scriem o metodă care să extindă tipul string:
class Program
{
static void Main(string[] args)
{
string corDate = "01/01/2008";
string wroDate = "20091/112/112";
Console.WriteLine(corDate.isDate());
Console.WriteLine(wroDate.isDate());
}
}
public static class ExtMet
{
public static bool isDate(this string s)
{
Regex dateRegex = new Regex(@"^\d{1,2}\/\d{1,2}\/\d{2,4}$");
return (dateRegex.IsMatch(s)) ? true : false;
}
}
Rezultatul este cel aşteptat:
True
False
Press any key to continue . . .
Se observă folosirea directă a metodei isDate() asupra variabilei de tip string. Cum a fost posibil? Am extins tipul string in clasa statica ExtMet (observati parametrii metodei public static bool isDate(this string s)).
Deşi sunt o “armă” puternică, metodele extinse ar trebui folosite cu atenţie. Codul ar putea deveni greu de înţeles. Folosite, însă, cu grijă, aduc o funcţionalitate binevenită şi prezintă mici riscuri de “împuşcare în picior”.
Technorati tags: Code