Click here to Skip to main content
13,458,194 members
Click here to Skip to main content
Add your own
alternative version


4 bookmarked
Posted 20 Oct 2011

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

, 20 Oct 2011
Rate this:
Please Sign up or sign in to vote.
Good practice in method design

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

So today, I was refactoring a code at my work place. 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 method, but there is a slight problem with their design with respect to 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.

Regarding the 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 the conclusion that it is better to have a return type of method to most derived type as shown below:

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

In 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 it's all a matter of being flexible or choosy here.

Similarly, with respect to the second method accepting more derived parameter type, this method is tightly coupled to the List<T> typed arguments. I won't 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 implement IList<T> interface, thus again making the code more flexible.

Thanks for reading!

P.S.: If you know of any better practice, please do let me know. Your valuable suggestions/comments/votes are appreciated.


This article, along with any associated source code and files, is licensed under The GNU Lesser General Public License (LGPLv3)


About the Author

Software Developer (Senior) Siemens
India India
A .net developer since 4+ years, wild, curious and adventurous nerd.

Loves Trekking/Hiking, animals and nature.

A FOSS/Linux maniac by default Wink | ;)

An MVP aspirant and loves blogging ->

You may also be interested in...


Comments and Discussions

-- There are no messages in this forum --
Permalink | Advertise | Privacy | Terms of Use | Mobile
Web04 | 2.8.180323.1 | Last Updated 20 Oct 2011
Article Copyright 2011 by zenwalker1985
Everything else Copyright © CodeProject, 1999-2018
Layout: fixed | fluid