C# · CodeProject · Dotnet

Good Practice in Method Design – TIP (Beginner/Intermediate)

Dear Reader,

In this post, i shall show you a small good practice that i follow and even many books suggests while designing our generic methods which we daily write.

So today i was refactoring a code @my work place and due to privacy rules i will not post the exact code but similar kind below:

public IList<T> GetList<T>()
{
IList<T>  IMyList = new List<T>();

return IMyList;
}

public void DoSomeWorkOnMyCollection<T>(List<T>myList)
{
//Some collection operations done.
}

For sure there is no flaw in this methods, but there is a slight problem with their design w.r.t extensibility. Upon further refactoring process i happen to see similar method DoSomeWorkOnMyCollection() implemented again somewhere else but this time it was for handling HashSet<T>type.

W.r.t to first method i.e  GetList<T>() the return type is more generic or more base type, which at the caller side i might have some problem.

So upon reading some books and blog i came to a conclusion that its better to have a return type of method to most derived type as shown below:

public List<T> GetList()
{
return new List<T>();
}

Such a way i do get flexibility in getting the return value to List<T>or IList<T>(more stronger) at the caller side. So its all matter of being flexible or choosy here.

Similarly w.r.t to the second method accepting more derived parameter type, this method is tightly coupled to the List<T> typed arguments, i wont be able to pass arrays or other types at all to this method, such way forcing me to write other methods or overloaded methods. So to have more of a generic code, i can go for:

public void DoSomeWorkOnMyCollection<T>(IList<T> myList)
{
//Some collection operations done.
}

Now i can pass Arrays, other types which implements IList<T> interface, thus again making the code more flexible.

Thanks

P.S: Any better practice, do let me know. Your valuable suggestions/comments/votes are appreciated 🙂

Advertisements

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s