Your property names are causing recursion that is generating the Exception. Look at this code..
public string firstName
{
set{ txtFirst.Text = value;}
get { return firstName;}
}
When you access the firstName property, it is running the 'get' code which is calling firstName again. This will cause never ending recursion which ends up in a StackOverflow exception.
You should really name like this...
private string firstName = string.empty;
public string FirstName
{
set{ txtFirst.Text = value;}
get { return firstName;}
}
Public fields should be capitalised, this will also avoid the StackOverflow since firstName and FirstName are treated differently now.
This also applies to your 'lastName' property.
NB: In future, you can figure out where StackOverflow exceptions are occuring in your code by using your debug window. When the exception causes the code to stop, from your Debug menu choose Debug->Windows->Call stack. This will show you all the calls that have happened up to this point, you will see lots of the same function calls in here (the recursive calls) which will tell you where the problem lies.