2011-01-14 32 views
18

Duplicar posibles:
How do you give a C# Auto-Property a default value?propiedad automática con el valor por defecto

¿Hay alguna manera agradable para proporcionar un valor predeterminado para una propiedad automática?

public int HowHigh { get; set; } // defaults to 0

Si no se establece explícitamente en cualquier lugar, quiero que sea 5. ¿Conoce una forma sencilla para ello? P.ej. Podría configurarlo en el constructor o algo así, pero eso no es elegante.

ACTUALIZACIÓN: C# 6 lo tiene: http://geekswithblogs.net/WinAZ/archive/2015/06/30/whatrsquos-new-in-c-6.0-auto-property-initializers.aspx

+0

Solo en VB.NET: Propiedad pública HowHigh As Integer = 42. Esa sería una sintaxis aproximada en C#. –

+2

Quiero esto: 'public int HowHigh {get; conjunto; } = 5; ' –

+2

@ JerryNixon-MSFT: [Debe sentirse tan feliz desde que se lanzó C# 6.0] (http://www.kunal-chowdhury.com/2014/11/csharp-6-auto-property.html#wQAWULz9VA5JbyLK .97) :) – Flater

Respuesta

11

Si el valor predeterminado para el tipo no es suficiente, entonces la única forma de hacerlo es a través de un constructor.

10

mejor que puede hacer es configurarlo en el constructor, no se puede hacer cambios en las propiedades automáticas, se necesita un campo de respaldo e implementar el setter/getter a sí mismo de otro modo .

El uso de un campo de respaldo se puede escribir algo como esto:

private int _howHigh = 0; 
public int HowHigh { get {return _howHigh; } set { _howHigh = value; } } 
+0

Creo que esta es la mejor solución –

13

No, no es ninguna buena manera de hacer esto -, básicamente, tiene que establecer en el constructor, que no es agradable .

Existen varias limitaciones para las propiedades automáticas como esta - mi mayor queja es que no hay una manera de crear una propiedad automática de solo lectura que se pueda establecer en el constructor pero en ningún otro lugar (y respaldado por un campo de solo lectura)

+0

+1 para solo lectura, excepto en constructores. Mataría por eso dado un cierto diseño que quiero implementar. –

+2

¿Puedo proponer un nuevo atributo para esto en C# 5? DefaultValueAttribute sería perfecto :) –

+2

@Dercsar: No creo que un atributo sea el camino a seguir aquí. Prefiero ver un cambio de idioma. Después de todo, es una pieza de azúcar sintáctica * language *. Aunque dudo mucho que lo veamos en C# 5. –

3

En una palabra: No.

propiedades automáticas son un pony de un solo truco, tan pronto como se necesita algo extra (como un valor por defecto razonable) que debe volver a las propiedades de campo regulares respaldo.

Soy un usuario de Resharper, y hace que pasar de propiedades automáticas a respaldadas sea muy fácil.

2

El constructor NO es la única opción que tiene.

creo que esto es lo mejor:

private int m_HowHigh = 5; 
public int HowHigh { 
    get { return m_HowHigh; } 
    set { m_HowHigh = value; } 
} 

prefiero esto para facilitar la lectura más que el ctor().

Esto no es lo que quiere:

[DefaultValue(5)] 
public int HowHigh { get; set; } 

Referencia: http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx#Y2248

Debido a que esto es sólo un adorno y no establece el valor (en C# 4).

+0

pero esta no es una propiedad de auto –

+0

En ese caso, el constructor * era * la única opción que tenía. –

Cuestiones relacionadas