2010-03-01 15 views
12

Estoy intentando hacer las propiedades de la clase que solo se pueden establecer a través del constructor de la misma clase.Establecer propiedades de una clase solo a través del constructor

+0

Hola, la pregunta es un poco vaga, no mencionaste qué lenguaje de programación eres rey sobre y las etiquetas elegidas son pobres. ¿Puedes editar y aclarar/elaborar más? – BalusC

+0

¿Qué idioma? ¿Has probado Google? Esta es una parte bastante básica de cualquier idioma. – noah

Respuesta

8

que las propiedades de sólo lectura que apoyarse campos:

public class Thing 
{ 
    private readonly string _value; 

    public Thing(string value) 
    { 
     _value = value; 
    } 

    public string Value { get { return _value; } } 
} 
+0

Hola, David, gracias por la respuesta rápida, crees que esto hace que las propiedades de la clase solo sean establecidas por el constructor –

+1

Sí, lo hace. Si usa C#, actualice sus etiquetas en su publicación original para que quede más claro. Esta respuesta es asumiendo que estás usando C#. Si no lo está, de nuevo, agregue una etiqueta con el lenguaje de programación que está utilizando, para que la gente pueda entender la pregunta con mayor claridad. –

20

This page from Microsoft describe cómo lograr establecer una propiedad única del constructor.

Puede hacer una propiedad inmutable de dos maneras. Puede declarar que el establece el acceso.para ser privado. La propiedad solo se puede configurar dentro del tipo , pero es inmutable para los consumidores. En su lugar, puede declarar el acceso de obtención, lo que hace que la propiedad sea inmutable en todas partes, excepto en el constructor del tipo.

En C# 6.0 incluido con Visual Studio 2015, se ha producido un cambio que permite establecer las propiedades get only del constructor. Y solo del constructor

El código, por tanto, podría simplificarse en sólo un obtener sólo la propiedad:

public class Thing 
{ 
    public Thing(string value) 
    { 
     Value = value; 
    } 

    public string Value { get; } 
} 
1

La forma correcta es:

public string MyProperty{ get; private set; } 

public MyClassConstructor(string myProperty) 
{ 
    MyProperty= myProperty; 
} 
+0

MyProperty se puede cambiar por cualquier método en la misma clase. – mayu

Cuestiones relacionadas