Да - ваш код не предоставляет this
в любом из конструкторов, поэтому никакой другой код не может "увидеть" объект до того, как он будет полностью создан. Модель памяти .NET (начиная с .NET 2) включает в себя барьер записи в конце каждого конструктора (IIRC - поиск в блоге Джо Даффи для получения более подробной информации), поэтому нет никакого риска, что другой поток увидит «устаревшее» значение, насколько это возможно. насколько я знаю.
Лично я бы все же обычно использовал вместо этого свойство как способ отделить реализацию от API, но с точки зрения безопасности потока это нормально.