I'm loving it! En dan heb ik het over extension methods. Ik zal mijn enthoustme proberen te verduidelijken.
Er zijn een aantal dingen in de BCL van het .NET framework waar ik mij aan stoor. Een goed voorbeeld is hier van de method String.Format. De Format method is een procedure om format items te vervangen door waardes. Hier de situatie uitgewerkt in een stukje code: String pattern = "Hello {0}, you are {1} years old.";
String result = String.Format(pattern, Fullname, Age);
myLabel.Text = result;
In de bovenstaande code maak ik een object aan van het type String die mijn format items bevat. Vervolgends geef ik dit object mee aan de Format procedure die mijn format items gaat vervangen. Hierna vang ik het resultaat op en stop ik dit in de text property van een Label.
Waarom moet ik een procedure gebruiken voor deze actie?
Ik werk met een object georiënteerde taal waarbij verantwoordelijkheid en gedrag bij objecten hoort te liggen en niet in procedures! Ik wil iets doen met het object, niet het object meegeven aan een procedure. Als ik het object namelijk moet meegeven aan een procedure komt de verantwoordelijkheid niet bij het object te liggen maar in een enkele procedure. Wie heeft dit verzonnen en waarom?
De oplossing
Met de introductie van extension methods heb ik de mogelijkheid om gedrag aan objecten toe te voegen. De volgende extension method voegt het format gedrag toe aan het String type: public static class Extensions
{
public static String Format(this String target, params Object[] args)
{
return String.Format(target, args);
}
}
Hierna kunnen we de volgende code gebruiken: String pattern = "Hello {0}, you are {1} years old.";
String result = pattern.Format(Fullname, Age);
myLabel.Text = result;
En voor de shorties onder ons: myLabel.Text = "Hello {0}, you are {1} years old".Format(Fullname, Age); |