C# Extension methods explained
public void myfunc()
{
int myInt = 0;
string myString = "y";
string[] myStrings = {myString, "janaganamana", "me", "you" };
List<int> intList = new List<int> { myInt, 5,6,7 };
Dictionary<string, int> myDict = new Dictionary<string, int> {
{ myString, myInt },
{ "janaganamana", 5 },
{ "me", 6 },
{ "you", 7 }
};
}
The above code may be very clear as a simple data types and initialization of same
Now if I have two classes
public class Individual
{
public string FirstName{get;set;}
public decimal pocketmoney{get;set;}
}
public class Friends
{
public List<Individual> Group { get; set; }
}
we can initialize
Friends myfiends = new Friends
{
Group = new List<Individual> {
new Individual {FirstName = "john", pocketmoney = 555M},
new Individual {FirstName = "rama", pocketmoney = 65M},
new Individual {FirstName = "king", pocketmoney = 77M}
}
};
That part is no brainer.
Now Let us use an extension method as explained earlier
http://www.janaganamana.net/onedefault.aspx?bid=780
1) Extension methods need to be defined at a top level namespace.
2) class name does not matter much
3) parameter has "this" with one argument
namespace mynamespace
{
public static class MyExtensionMethods
{
public static decimal TotalInvestment(this Friends allfriends)
{
decimal total = 0;
foreach (Individual boy in allfriends.Group)
{
total += boy.pocketmoney;
}
return total;
}
}
}
decimal weHave = myfiends.TotalInvestment();decimal weHave = myfiends.TotalInvestment();
Update the Friends class as below.
public class Friends : IEnumerable<Individual>
{
public List<Individual> Group { get; set; }
public IEnumerator<Individual> GetEnumerator()
{
return Group.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
public static class MyExtensionMethods
{
public static decimal TotalInvestment(this IEnumerable<Individual> allfriends)
{
decimal total = 0;
foreach (Individual boy in allfriends)
{
total += boy.pocketmoney;
}
return total;
}
public static IEnumerable<Individual> FilterByRichToday(
this IEnumerable<Individual> inds, int atLeast)
{
foreach (Individual ind in inds)
{
if (ind.pocketmoney > atLeast)
{
yield return ind;
}
}
}
}
Now we can call as below ..
decimal weHaveAlmost = myfiends.FilterByRichToday(1000).TotalInvestment();
Notice ,, using extension methods, we did iteration inside our object also filteration where needed.