2011-11-28 8 views
23

Llegué a saber que C# 3.0 viene con una nueva característica de Propiedades autoejecutables, me gustó, ya que no tenemos que declarar varible privada adicional en esto (comparar con la propiedad anterior), antes yo estaba usando una propiedad es decirCómo establecer el valor predeterminado para las propiedades autoejecutables en ASP.NET

private bool isPopup = true; 
public bool IsPopup 
{ 
    get 
    { 
     return isPopup; 
    } 
    set 
    { 
     isPopup = value; 
    } 
} 

Ahora me he convertido en propiedad Implementado-Auto es decir

public bool IsPopup 
{ 
    get; set; 
} 

quiero fijar el valor por defecto de este propiedad en true sin usarlo ni siquiera en el método page_init, lo intenté pero no lo logré, ¿puedo uno explica cómo hacer esto?

+3

Inicialízalo en el constructor –

Respuesta

39

Puede inicializar la propiedad en el constructor por defecto:

public MyClass() 
{ 
    IsPopup = true; 
} 

con C# 6.0, es posible inicializar la propiedad en la declaración como campos miembros normales:

public bool IsPopup { get; set; } = true; // property initializer 

ahora es incluso Es posible crear una propiedad automática real de solo lectura que puede inicializarse directamente o en el constructor, pero no configurada en otros métodos de la clase.

public bool IsPopup { get; } = true; // read-only property with initializer 
+0

Gracias, creo que esa es la única manera. –

+0

En busca de respuestas más específicas, para esto tengo que escribir código adicional en el constructor, ¿no hay forma de escribirlo en la propia propiedad implementada automáticamente, sin usar convenciones antiguas? –

+2

De alguna manera tiene que inicializar su propiedad.Como no hay campo de respaldo (es generado por el compilador), no hay otra opción. Bajo estas circunstancias, escribo las propiedades completas, afortunadamente obtienes intellisense para hacer esto. – slfan

0

Ha intentado DefaultValueAttribute

+0

No, ya que nunca uso .net 4.0 –

+9

Ok, así que descubrí que esta no era la forma correcta. Parece que DefaultValueAttribute simplemente instruye a los metadatos de que una propiedad puede tener un valor predeterminado y en realidad no lo establece. Así que espero esto ayuda a alguien –

6

atributos especificados por una propiedad de automóviles no se aplican al campo de respaldo, por lo que un atributo para un valor predeterminado no funciona para este tipo de propiedad.

Puede, sin embargo, inicializar una propiedad de auto:

VB.NET

Property FirstName As String = "James" 
Property PartNo As Integer = 44302 
Property Orders As New List(Of Order)(500) 

C# 6.0 y superior

public string FirstName { get; set; } = "James"; 
public int PartNo { get; set; } = 44302; 
public List<Order> Orders { get; set; } = new List<Order>(500); 

C# 5.0 y por debajo

Desafortunadamente, las versiones de C# inferiores a 6.0 no son compatibles con esto, por lo que debe inicializar los valores predeterminados para propiedades automáticas en el constructor.

+1

gracias por la información –

+1

Buena edición Eagle-Eye, gracias por actualizar esto para incluir C# 6.0. –

0
using System.ComponentModel; 

[DefaultValue(true)] 
public bool IsPopup 
{ 
    get 
    { 
     return isPopup; 
    } 
    set 
    { 
     isPopup = value; 
    } 
} 
+3

¿viste la respuesta de Akshat Jeewan Sharma? –

+0

¿Fue "Copiar y pegar"? –

+2

vea la respuesta de @Jeewan Sharma para entender que esta no es la manera correcta de hacerlo. –

0

Puede utilizar valor de la propiedad predeterminada, como a continuación

Una ventaja de este método es que no es necesario comprobar los valores nulos parabooleana tipos

using System.ComponentModel; 

public class ClassName 
{ 
    [DefaultValue(true)] 
    public bool IsPopup{ get; set; } 
} 
+2

Eso realmente no establece el valor predeterminado, simplemente indica cuál es el valor predeterminado –

+0

@JoeFlateau ¿podría explicar cuál es la diferencia de ambos métodos? B'cos cuando tengo acceso a esa propiedad desde el controlador, su valor es verdadero. Así que entonces ? – Sampath

+4

DefaultValue es puramente informativo, Visual Studio mostrará el valor como no negrita. –

Cuestiones relacionadas