Attention! les expressions bodied properties exécuteront l'expression chaque fois qu'elles sont appelées! Vous pouvez voir les exemples dans la dernière partie de ma réponse.
public string Name => "bob";
est le sucre syntaxique pour
public string Name
{
get
{
return "bob";
}
}
Alors que
public string Name { get; } = "bob";
est le sucre syntaxique pour
private readonly string _name = "bob";
public string Name
{
get
{
return _name ;
}
}
Check it out yourself.
Attention, voici la partie dangereuse!
Veuillez noter que le corps d'expression sera exécuté chaque fois que vous appelez cette propriété. C'est bien quand il est de retour d'une valeur codée en dur, mais si elle est de retour une liste, par exemple, il retourne une nouvelle liste à chaque fois:
public List<String> Names => new List<String>() {"bob"};
est le sucre syntaxique pour:
public List<string> Names
{
get
{
return new List<string>() {"bob"};
}
}
C'est pas le cas avec l'initialisation auto-propriété:
public List<String> Names { get; } = new List<String>() {"bob"};
est le sucre syntaxique pour cela:
private readonly List<string> _names = new List<string>() {"bob"};
public string Names
{
get
{
return _names;
}
}
Comme vous pouvez le voir, ici la liste n'est initialisée qu'une seule fois.
Check it out yourself.
Malheureusement, la réponse du duplicata ne répond pas aux spécificités d'un ensemble-une seule fois la valeur, la réponse ci-dessous répond à ma question exactement. – Jay