2011-09-03 10 views
5

En una forma compleja, tengo una propiedad llamada Readonly que determina si todo es editable o no. Hasta ahora, estoy pasando esta propiedad a cada control sub personalizado en esta forma por el constructor, y en otros lugares, tengo acceso al formulario en sí para obtener el valor.Está utilizando una propiedad estática en una forma de mala práctica sabiendo que solo hay una instancia del formulario?

Pero esto se está volviendo demasiado complejo.
Estoy pensando en hacer esta propiedad Estática en el formulario sabiendo que solo hay una instancia de este formulario en la aplicación.

¿Está bien utilizar esta propiedad como estática en este caso? O es una mala práctica, incluso si solo hay una instancia de la forma.

Respuesta

3

Simplemente pregúntese: se relaciona esto con la forma o al tipo de formulario. Hipotéticamente, si hubiera más de una forma, ¿serían todas ellas de solo lectura/no al mismo tiempo? ¿O sería por forma?

Entonces: usted tiene la respuesta. Sospecho que debería ser una instancia (no estática).

+0

realidad que está relacionado con la forma y convirtiéndola en estático sólo para simplificar tratar con ella en lugar de pasarlo (o el acceso a ella) en todas partes. –

+0

@FrenchBoy suena como hacer algo feo para ser perezoso, IMO –

+0

SÍ: $, eso es todo. Me pregunto qué tan feo es. –

4

Incluso si tiene una sola instancia del formulario que utiliza un campo estático no lo hace seguro. Podría tener múltiples hilos que causan problemas. Por no mencionar la dificultad para probar la unidad de su aplicación. Personalmente trato de evitar campos estáticos tanto como sea posible.

1

Aquí es una solución alternativa:

  1. Añadir los controles a su forma como de costumbre
  2. Crear una interfaz llamada IReadOnlyToggable que tiene una propiedad IsReadOnly y deje que la forma en práctica.
  3. Añadir la siguiente propiedad a sus controles personalizados:

código:

public bool IsFormReadOnly 
{ 
    get 
    { 
     var form = ParentForm as IReadOnlyToggable; 
     return form != null && form.IsReadOnly; 
    } 
} 
Cuestiones relacionadas