Pregunta

Tengo una clase, esta clase puede estar vacía. Esta clase solo tiene propiedades públicas de tipo String. Cuando esta clase está en un estado vacío, eso significa que todas las propiedades tienen el valor de String.Empty.

1) Con un campo público estático , las propiedades de Class.Empty se pueden modificar.

2) No veo que un getter estático público devuelva un nuevo objeto vacío (establezca todos los campos en Vaciar manualmente ) cada vez. Considero esa mala práctica.

3) Una solución alternativa es implementar su propia Clase. IsNullOrEmpty (Clase obj) .

4) Una propiedad booleana pública no estática obj.IsEmpty .

En la otra clase donde se está utilizando esta clase , la propiedad nunca será nula. La otra clase se devuelve desde un método (de otra clase más) que la inicializa correctamente.

El único caso en que la propiedad podría ser nula es si se actualiza fuera de ese método, lo que hace que de todos modos esté en un estado no válido.

¿Fue útil?

Solución

1 y 2 conflictos, básicamente.

O su tipo es inmutable, en cuyo caso puede devolver una referencia a la misma instancia cada vez ... o es mutable, en cuyo caso tiene para devolver una referencia a un nuevo objeto cada vez.

La razón por la que string.Empty está bien es precisamente porque string es inmutable.

¿Su tipo tiene para ser mutable?

EDITAR: Según su comentario, parece que las propiedades no deberían tener setters en absoluto. En cambio, los valores deben pasarse al constructor y almacenarse en campos de solo lectura.

En ese punto, su tipo es inmutable, por lo que puede exponer un campo público o una propiedad que siempre devuelve el mismo valor, es decir,

private static readonly MyType empty = new MyType("", ""); // Or whatever
public static MyType Empty { get { return empty; } }

o

public static readonly MyType Empty = new MyType("", "");

No necesita preocuparse de que nadie establezca ninguna propiedad, porque no tiene ningún configurador ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top