By having 20 parameters there is a big chance that your class in question violates the Single Responsibility Principle and forms some sort of monolithic class without properly delegating, composing functionality.
Ensure that your class has a low coupling and a high cohesion.
See http://500internalservererror.wordpress.com/2009/02/23/what-do-low-coupling-and-high-cohesion-mean-what-does-the-principle-of-encapsulation-mean/
As we are not doing full code review here (go to https://codereview.stackexchange.com/ instead)
I suspect you are passing things like country, zip, phone number etc all as parameters.
Ask yourself what data is absolutely required to construct a valid object.
If you have a class Person
which requires a property called Name
then having a setter for Name
but not a ctor argument allows you to create incomplete classes. This shifts the burden of maintaining consistency to every method as you cannot be sure that Name
has been set. Such code is bad and typically results in carrying some "initialized" flag or a function and clutter your code with checks.
Your ctor should contain the minimal set of parameters. Everything else can be done via properties or being further composed, e.g. an Address
class removing the complexity of passing zip, state, street, etc all in the parent ctor.
You may create a "Contact" class storing email and phone numbers, etc.