Propriedades C #: como usar a propriedade do conjunto personalizado sem campo privado?


93

Eu quero fazer isso:

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

É possível usar o campo privado gerado automaticamente?
Ou é necessário que eu implemente desta forma:

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

2
Há muitas boas discussões sobre isso nesta questão do SO: stackoverflow.com/questions/1277018/…
David Hall

Respostas:


102

Uma vez que você deseja fazer qualquer coisa personalizada no getter ou no setter, você não pode mais usar as propriedades automáticas.


37

Você pode tentar algo assim:

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

6
1 Em minha opinião, esta resposta repreende a resposta aceita. Ele está usando propriedades automáticas. Ele define explicitamente setter como privado. Isso é bom porque permite ao usuário final ou desenvolvedor saber que provavelmente há mais coisas acontecendo por trás do método setter.
ooXei1sh

Qual é a diferença entre isso e não ter definido nada?
Sidhin S Thomas

3
@SidhinSThomas não fornecer um private setevitaria que a propriedade fosse definida pelos membros de sua classe; seria estritamente somente leitura. Você só poderá definir seus dados no construtor.
Bondolin

15

Isso não é possível. Propriedades implementadas automaticamente ou código personalizado.


11

A partir do C # 7, você pode usar definições de corpo de expressão para a propriedade gete os setacessadores.

Veja mais aqui

private string _name;

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

4
Ainda usando um campo privado. Realmente não ajuda o OP.
TSmith

Enquanto isso funciona, é como diz @TSmith, não é o que o OP deseja.
M. Ruiz

7

É necessário que você o implemente de acordo com o seu cenário. Ambos gete setdevem ser implementados automaticamente ou totalmente implementados juntos, não uma combinação dos dois.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.