¿Por qué lanzar una excepción en los resultados del constructor en una referencia nula?

¿Por qué lanzar una excepción en los resultados del constructor en una referencia nula? Por ejemplo, si ejecutamos los códigos debajo del valor de teacher es nulo, mientras que st.teacher no lo está (se crea un objeto Teacher). ¿Por qué?

<code>using System;

namespace ConsoleApplication1
{
  class Program
  {
    static void Main( string[] args )
    {
      Test();
    }

    private static void Test()
    {
      Teacher teacher = null;
      Student st = new Student();
      try
      {
        teacher = new Teacher( "", st );
      }
      catch ( Exception e )
      {
        Console.WriteLine( e.Message );
      }
      Console.WriteLine( ( teacher == null ) );  // output True
      Console.WriteLine( ( st.teacher == null ) );  // output False
    }
  }

  class Teacher
  {
    public string name;
    public Teacher( string name, Student student )
    {
      student.teacher = this;
      if ( name.Length < 5 )
        throw new ArgumentException( "Name must be at least 5 characters long." );
    }
  }

  class Student
  {
    public Teacher teacher;
  }

}
</code>

Respuestas a la pregunta(6)

Su respuesta a la pregunta