Tener un argumento en el constructor (constructor no predeterminado), para mí, permite una mejor prueba. Puede 'inyectar' ciertos datos en un campo de miembro que no podría necesariamente hacer sin hacer público ese miembro (o al menos interno) o hacer una segunda llamada con una propiedad 'setter'.
Como puede tener múltiples constructores, podría tener una segunda para probar, junto con un constructor predeterminado, si realmente deseaba.
No hay ningún problema de rendimiento real aparte de tener que realizar una llamada separada para rellenar datos más tarde, o tener un código menos mantenible con múltiples llamadas a la clase (uno para crear el objeto, el segundo para poblar el miembro)
EDIT: Me di cuenta que había respondido una pregunta incorrecta. Pensé que estaba preguntando sobre la diferencia entre los constructores por defecto y los que no lo son. Ahora veo que se trataba de un constructor predeterminado que inicializa el miembro en el constructor frente a la declaración del miembro ...
bien, ¿qué tal el rendimiento y la asignación de memoria? – retide
Esto realmente no tiene sentido. No se puede inyectar algo si no se ofrece como un constructor, y un constructor específico para la prueba es el olor del código (apunta a una clase con demasiadas dependencias directas). Si realmente desea desacoplar la clase, tome todos los parámetros que puedan necesitar ser cambiados como interfaces. – Femaref
Quizás, pero en el contexto de su pregunta con esta variable miembro, ciertamente es una opción. Acepto, en caso de que tenga muchas propiedades, cree una interfaz y póngala. – Killnine