Change read-only property in class itself

Asked

Viewed 271 times

3

A read-only property implements only the provider get. 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?
    }
}

3 answers

5


  • You around here? :)

  • 5

    Yeah, gone. But studying more C# :)

  • @bfavaretto Saudades work with . NET haha :(

  • 1

    @Laerte Even without customer demand, sometimes C# study to detox from PHP :)

3

May determine that the setis private, so:

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() => UmMetodoPrivadoQualquer(); //o único jeito de chamar um método privado externamente é dentro de um público
}

Behold working in the ideone. And in the .NET Fiddle. Also put on the Github for future reference.

2

Then the way is not to use auto properties:

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
    }
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.