2008-10-15 18 views
7

¿Cómo puedo configurar un valor predeterminado a una propiedad definida de la siguiente manera:¿Cómo establecer un valor predeterminado usando propiedades de "estilo corto" en VS2008 (Propiedades automáticas)?

public int MyProperty { get; set; } 

que está utilizando "apuntalar" [tab] [tab] en VS2008 (fragmento de código).

¿Es posible sin caer en el "camino viejo" ?:

private int myProperty = 0; // default value 
public int MyProperty 
{ 
    get { return myProperty; } 
    set { myProperty = value; } 
} 

Gracias por su tiempo. Saludos cordiales.

+0

Como nota al margen, no es necesario establecer una propiedad a su valor normal por defecto (como int i = 0). Eso sucede automáticamente cuando se crea una instancia de la clase. –

+0

bueno, elijo int porque fue lo primero que se me vino a la mente ... pero quiero establecer un valor predeterminado para una propiedad de cualquier clase (cadena, clase personalizada, etc.) –

Respuesta

9

Simplemente configure el valor "predeterminado" dentro de su constructor.

public class Person 
{ 
    public Person() 
    { 
     this.FirstName = string.Empty; 
    } 

    public string FirstName { get; set; } 
} 

Además, se llaman Propiedades automáticas.

+0

FWIW, establecer un valor predeterminado es ineficiente si Cambias el valor en cualquiera de tus constructores. En la empresa para la que trabajo, realmente consideramos que es un "olor a código" tener un valor predeterminado porque entonces tenemos que ir y ver si se sobrescribe en cualquiera de los constructores. –

+0

Gracias David, lo tendremos en cuenta –

2

Mi preferencia sería hacer las cosas "a la antigua", en lugar de init en el constructor. Si luego agrega otro constructor, deberá asegurarse de llamar al primero, o sus propiedades no se inicializarán.

+1

Claro, pero llamar a uno de los constructores de todos los demás suele ser lo que debe hacer de todos modos. Es un patrón bastante estándar: los constructores con menos parámetros pasan los valores predeterminados al constructor con la mayoría de los parámetros. –

0

[DefaultValue ("MyFirstName")] cadena pública FirstName {get; conjunto; }

+0

No funciona, pero realmente debería estar hecho para. – Simon

Cuestiones relacionadas