Comment vous pouvez définir une auto-propriété get-only à partir d'un constructeur? Le code ci-dessous montre comment vous pouvez définir la propriété à partir du constructeur, mais en utilisant la réflexion montre qu'il n'y a pas de setter dans les coulisses. Comment est-il défini à partir de l'appel du constructeur si la méthode setter n'existe même pas dans l'IL?C# Propriété sans setter - comment peut-elle être définie à partir du constructeur?
void Main()
{
var obj = new GetOnlyProperty("original value");
Console.WriteLine(obj.Thing); //works, property gets set from ctor
//get the set method with reflection, is it just hidden..?
//nope, null reference exception
typeof(GetOnlyProperty)
.GetProperty("Thing", BindingFlags.Instance | BindingFlags.Public)
.GetSetMethod()
.Invoke(obj, new object[]{"can't set me to this, setter doen't exist!"});
}
public class GetOnlyProperty
{
public string Thing { get; }
public GetOnlyProperty(string thing)
{
Thing = thing;
}
}
auto-propriétés non abstraites utilisez toujours un champ d'accompagnement. La définition de la propriété à l'intérieur de la classe est traduite en définissant le champ de sauvegarde. Événement travail d'une manière similaire. – IllidanS4