私はクラスを持っています:
    public class Person
{
    public string FirstName { get; private set; }
    public string LastName { get; private set; }
    public string Email { get; private set; }
    public string Telephone { get; private set; }
    public Address Address { get; private set; }
    public Person(string firstName, string lastName)
    {
        //do null-checks
        FirstName = firstName;
        LastName = lastName;
        Address = new Address();
    }
    public void AddOrChangeEmail(string email)
    {
        //Check if e-mail is a valid e-mail here
        Email = email;
    }
    public void AddOrChangeTelephone(string telephone)
    {
        //Check if thelephone has correct format and valid symbols
        Telephone = telephone;
    }
    public void AddOrChangeAdress(Address address)
    {
        Address = address;
    }
コンストラクターにないプロパティはオプションです。つまり、個人は電子メール、住所、または電話を必要としません。ただし、クラスのユーザーに、最初に必要な情報を提供せずにオブジェクトを作成する機会を提供し、その後、情報を追加するために使用するメソッドを見つける必要があります。
質問:
- それらにそのオプションを与えるために3つの追加のオーバーロードを作成するのは正しいですか?
 - オプションのプロパティでパブリックセッターを許可し、そこで検証を行う必要がありますか?
 - その人が結婚して姓を変更した場合、姓を変更するための追加のメソッドが必要ですか、それともこのセッターも公開して、コンストラクターでそれらを要求する必要がありますか?