Change read-only property in the class itself

3

A read-only property implements only the get accessor. But what if I want to modify this property in the class itself? Let's say

public class MinhaClasse
{
    public string PropriedadeDeMinhaClasse { get; }

    private void UmMetodoPrivadoQualquer ( )
    {
        //Como eu mudo o valor da propriedade aqui?
    }
}
    
asked by anonymous 30.06.2016 / 22:45

3 answers

5

Use a private setter:

public string PropriedadeDeMinhaClasse { get; private set; }

Tip found here: link

Test: link

    
30.06.2016 / 22:51
3

You can determine that set is private, like this:

public class MinhaClasse {
    public string PropriedadeDeMinhaClasse { get; private set; }

    private void UmMetodoPrivadoQualquer ( ) {
        PropriedadeDeMinhaClasse = "texto aqui";
    }
}

A more complete example:

public class Program {
    public static void Main() {
        var x = new MinhaClasse();
        WriteLine(x.PropriedadeDeMinhaClasse);
        x.UmMetodoPublicoQualquer();
        WriteLine(x.PropriedadeDeMinhaClasse);
        x.UmMetodoPublico();
        WriteLine(x.PropriedadeDeMinhaClasse);
    }
}
public class MinhaClasse {
    //pode inicializar a propriedade se quiser
    public string PropriedadeDeMinhaClasse { get; private set; } = "Texto inicial";

    private void UmMetodoPrivadoQualquer() {
        PropriedadeDeMinhaClasse = "Outro texto";
    }
    public void UmMetodoPublicoQualquer() {
        PropriedadeDeMinhaClasse = "Novo texto"; //pode alterar em método públicos também
    }
    public void UmMetodoPublico() {
        //o único jeito de chamar um método privado externamente é dentro de um público
        UmMetodoPrivadoQualquer();
    }
}

See running on dotNetFiddle .

    
30.06.2016 / 22:51
2

public class MinhaClasse
{
    private string _propriedadeDeMinhaClasse;
    public string PropriedadeDeMinhaClasse 
    { 
        get { return _propriedadeDeMinhaClasse; } 
    }

    private void UmMetodoPrivadoQualquer ()
    {
        _propriedadeDeMinhaClasse = // valor
    }
}

Or private set; , which is almost the same thing:

public class MinhaClasse
{
    public string PropriedadeDeMinhaClasse { get; private set; }

    private void UmMetodoPrivadoQualquer ()
    {
        PropriedadeDeMinhaClasse = // valor
    }
}
    
30.06.2016 / 22:50