2010-07-26 29 views
6

¿Cuál es la forma más fácil/directa de establecer un valor predeterminado para una propiedad pública de C#?C# Propiedades automáticas: valores predeterminados de configuración

// ¿Cómo configuro un valor predeterminado para esto?

public string MyProperty { get; set; } 

Por favor, no sugieren que utilizo una propiedad privada & implementar las propiedades públicas/set conseguir. Tratando de mantener esto conciso, y no quiero entrar en una discusión sobre por qué eso es mucho mejor. Gracias.

+0

posible duplicado de http://stackoverflow.com/questions/40730/how-do-you-give-ac-auto-property-a-default-value – devio

+0

OT: Creo que quiere decir un campo privado – Douglas

+0

Creo que está confundiendo los conceptos de propiedades públicas/privadas y automáticas contra las propiedades implementadas manualmente con campos de respaldo. Estos conceptos son independientes. –

Respuesta

5

establecer el valor predeterminado en su constructor:

this.MyProperty = <DefaultValue>; 
+1

no es la instrucción 'this' redundante? – Jimmy

+3

sí, pero algunos lo consideran una buena práctica de codificación. – sbenderli

+0

@Jimmy: Considero el uso de "esto" en esta situación para que sea mucho más legible. Siempre quiero que lea . = . Si solo es = , rompe ese patrón. – jcollum

3

Por favor, no sugieren que el uso de una propiedad privada

Esa es la forma estándar para fijar tales valores por defecto. Puede que no te guste, pero lo que incluso la sintaxis de las propiedades automáticas hace después de la compilación, genera un campo privado y lo usa en getter y setter.

Puede establecer la propiedad en un constructor, que será lo más cercano a un valor predeterminado que pueda obtener.

+0

No hay argumento allí - Solo trato de mantener el código no crítico conciso. – Alan

+2

@ Alan Si tiene más de un constructor, ya no será conciso porque tendrá que comenzar a asegurarse de que la inicialización ocurra en todas las rutas de código.Utilizando un campo de respaldo privado puede tener un solo ** lugar ** conciso para inicializar esa propiedad. – AaronLS

+2

@AaronLS probablemente puedas estar bien si solo encadenas a tus constructores. – Alan

9

Sólo inicializar en el constructor:

public class MyClass 
{ 
    public string MyProperty { get; set; } 

    public MyClass() 
    { 
     MyProperty = "default value"; 
    } 
} 

Tenga en cuenta que si tiene varios constructores, tendrá que asegurarse de que cada uno de ellos, ya sea fija la propiedad o delegados a otro constructor, que lo hace.

+0

¿otra propiedad u otra ctor? –

+0

Gracias Jon, pero sbenderli lo hice primero :). Por alguna razón, asumí incorrectamente que el "valor predeterminado" sobrescribiría lo que se envió en la inicialización. – Alan

+0

@jk: Otro constructor. Doh. Edición. –

2

No, sería bueno si simplemente marcara la propiedad para indicar el valor predeterminado, pero no puede. Si realmente desea usar propiedades automáticas, no puede establecer un valor predeterminado en la declaración de propiedad.

La solución más limpia que he encontrado es establecer los valores predeterminados en el constructor. Todavía es un poco feo. Los valores predeterminados no se ubican junto con la declaración de propiedad, y puede ser complicado si tiene varios constructores, pero sigue siendo el mejor que he encontrado

2

si va a utilizar la implementación automática de propiedades, la única real La opción es inicializar los valores de propiedad en el constructor (es).

1

A partir de C# 6.0, puede asignar un valor predeterminado a una propiedad automática.

public string MyProperty {get; set; } = "Default Value"; 
Cuestiones relacionadas