2011-03-16 18 views
5

propiedades automáticas se añadieron a la lengua en aproximadamente .net 3 que crean un campo 'privado', de todas formas, utilizando el código:acceso a la propiedad automática - C#

public string foo {get;set;} 

¿Es posible conseguir realmente cualquier tipo de referencia a este campo privado?

quiero hacer algo como

public string foo {get{/*some code to check foo for nulls etc*/};set;} 

Sin perder esta función automática de propiedades y escribir algo como

private string _foo = null; 
public string foo{get{_foo==null?_foo="hello"; return _foo;}set{_foo=value;}} 
+6

Eso no lo convertiría en una propiedad automática, ¿o sí? – BoltClock

+1

¿Por qué diablos quieres agregar cheques en el * getter *? Los controles deben estar en * setter *. – CodesInChaos

+0

La inicialización lenta de IMO se usa en exceso. Si el valor predeterminado es verificar para construir solo asignarlo en el constructor. La inicialización diferida es buena para propiedades donde el valor predeterminado es costoso de construir y no siempre se usa. En mi experiencia, ese es el caso tal vez una vez en cien propiedades. – CodesInChaos

Respuesta

6

The backing field of an automatic property is anonymous; no puedes acceder desde dentro de su getter o setter.

Si necesita implementar su propia lógica en su getter o setter, su propiedad ya no se considera automática.

propiedades Auto simplemente están ahí para salvar el tedio de escribir y desagradables a la vista de ver más, gran número de estos:

private object _x; 

public object X 
{ 
    get { return _x; } 
    set { _x = value; } 
} 
3

no se puede tener una un conjunto de "automático" y conseguir "manual" (o un "manual" obtener con un conjunto "automático"). Debe tener "manual" o ambos "automáticos".

Cuestiones relacionadas