Propiedades de C #: ¿cómo usar la propiedad de conjunto personalizado sin un campo privado?


93

Quiero hacer esto:

public Name
{
    get;
    set
    {
        dosomething();
        ??? = value
    }
}

¿Es posible utilizar el campo privado generado automáticamente?
O es necesario que lo implemente de esta manera:

private string name;
public string Name
{
    get
    {
        return name;
    }
    set
    {
        dosomething();
        name = value
    }
}

2
Hay mucha discusión sobre esto en esta pregunta SO: stackoverflow.com/questions/1277018/…
David Hall

Respuestas:


102

Una vez que desee hacer algo personalizado en el getter o el setter, ya no puede usar propiedades automáticas.


37

Puedes probar algo como esto:

public string Name { get; private set; }
public void SetName(string value)
{
    DoSomething();
    this.Name = value;
}

6
+1 En mi opinión, esta respuesta reprende la respuesta aceptada. Está usando propiedades automáticas. Establece explícitamente setter en privado. Esto es bueno porque le permite al usuario final o al desarrollador saber que es probable que haya más cosas detrás del método de establecimiento.
ooXei1sh

¿Cuál es la diferencia entre esto y no haber establecido nada?
Sidhin S Thomas

3
@SidhinSThomas no proporcionar un private setevitaría que los miembros de su clase establezcan la propiedad; sería estrictamente de solo lectura. Solo podrá establecer sus datos en el constructor.
Bondolin

15

Esto no es posible. Propiedades implementadas automáticamente o código personalizado.


11

A partir de C # 7, puede usar definiciones de cuerpo de expresión para la propiedad gety los setdescriptores de acceso.

Ver más aquí

private string _name;

public string Name
{
    get => _name;
    set
    {
        DoSomething();
        _name = value;
    }
}

4
Sin embargo, sigo usando un campo privado. Realmente no ayuda al OP.
TSmith

Si bien esto funciona, es como dice @TSmith, no es lo que quiere el OP.
M. Ruiz

7

Es necesario que lo implementes por completo dado tu escenario. Ambos gety setdeben implementarse automáticamente o implementarse completamente juntos, no una combinación de los dos.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.