2011-05-04 24 views
5

tengo algo de interfaz y clase que implementa la interfaz:C# ¿Cómo establecer un valor predeterminado para las propiedades automáticas?

public interface IWhatever { 
    bool Value { get; set;} 
} 

public class Whatever : IWhatever { 
    public bool Value { get; set; } 
} 

Ahora bien, ¿C# permitir que el Value que tienen algún valor por defecto sin utilizar algún campo respaldo?

+1

¿Quiere decir que puede especificar el valor predeterminado, p. En este ejemplo, ¿el valor predeterminado es True? – tomasmcguinness

Respuesta

13

actualización

A partir de C# 6 (VS2015) esta sintaxis es perfectamente válido

public bool Value { get; set; } = true; 

como está estableciendo un valor para una propiedad de sólo lectura

public bool Value { get; } = true; 

El viejo, pre C# 6 respuesta

Spoiler de alerta para los de naturaleza excitable: El siguiente código no funcionará

lo preguntas, "¿Puedo hacer esto?"

public bool Value { get; set; } = true; 

No, no puede. Debe establecer el valor predeterminado en el constructor de la clase

+3

Cuando vi por primera vez la muestra de código pensé "¡De ninguna manera!¡Puedes hacer eso !? " –

+2

Sería increíble si esto realmente funcionara: 3 –

+3

¡Mi voto por esa característica tan productiva! –

2

Si no hay nada detrás, de manera predeterminada es falso, de acuerdo con la documentación.

Sin embargo, si desea que se crea una instancia con un valor inicial que no seafalse, puede hacerlo de esta manera:

public interface IWhatever 
{ 
    bool Value { get; set;} 
} 

public class Whatever : IWhatever 
{ 
    public bool Value { get; set; } 

    public Whatever() 
    { 
     Value = true; 
    } 
} 
+0

Quise decir, como, por ejemplo, establecerlo en 'true'. –

+0

@Yippie No, C# no le permite hacer eso. Si desea que tenga un valor inicial sin un campo de respaldo, debe configurarlo en el constructor. –

0

Por defecto Value habría false pero puede ser inicializado en el constructor.

0

No puede establecer Value en ningún otro valor predeterminado que el valor predeterminado del tipo de datos en la propiedad. Debe asignar el valor predeterminado en el constructor de Whatever.

1

El valor predeterminado en este momento es false. Para que sea true, configúrelo en el constructor.

public class Whatever : IWhatever 
{ 
    public bool Value { get; set; } 
    public Whatever() 
    { 
     this.Value = true; 
    } 
} 
0

Puede establecer un valor predeterminado en el constructor.

//constructor 
public Whatever() 
{ 
    Value = true; 
} 

public bool Value { get; set; } 

Por cierto - con propiedades automáticas, todavía tiene un campo de respaldo, sólo se genera para su por el compilador (syntactic sugar).

Cuestiones relacionadas