FirstName / LastName combinatorial, as I showed in my previous reply.

More imporaantly you need to re-factor (heavily)...look at how much duplication you have..

I any real application you will end up with thousands of
Code:
     if ((....))
                {
                    OnValidationMessage("Message to user");
                    return;
                }
type constructs.

Develop a good validation object model!!!!!

Other problems... You are tieing business logic (your classes) to UI presentation (Showing Messages). These should be separated by (typically) TWO layers.

A starting point...
Code:
class Verify<DATA_TYPE, HANDLER_TYPE>
{
    public Verify(object owner) {}
    public DATA_TYPE Value { get; set; }
}

class Person
{
   public  Person()
   {
       InstanceValidator(this);
   }
   public readonly Verify<string, Validator> FirstName(this);
   public readonly Verify<string, Validator> LastNameName(this);
   public ObjectValidator IsValid(this);
}
NOTE: Shortcust were taken, and this will NOT compile, it is for conceptual purposes only......