public class Foo
{
public string Name { get; private set;} // <-- Because set is private,
}
void Main()
{
var bar = new Foo {Name = "baz"}; // <-- This doesn't compile
/*The property or indexer 'UserQuery.Foo.Name' cannot be used
in this context because the set accessor is inaccessible*/
using (DataContext dc = new DataContext(Connection))
{
// yet the following line works. **How**?
IEnumerable<Foo> qux = dc.ExecuteQuery<Foo>(
"SELECT Name FROM Customer");
}
foreach (q in qux) Console.WriteLine(q);
}
Je viens en utilisant le modificateur privé, car il fonctionne et m'a empêché d'être stupide avec mon code, mais maintenant que je dois créer un nouveau Foo, je viens retiré le modificateur privé de ma propriété. Je suis juste vraiment curieux, pourquoi ExecuteQuery dans un travail IEnumerable de Foo?propriétés avec des ensembles privés d'initialisation en .Net
EDIT Ok, donc le modificateur privé ne tient pas la réflexion de voir le compositeur, et des réponses, il semble que ExecuteQuery (ou est-ce le contexte de données?) Utilise la réflexion pour obtenir les noms de propriété et ne tient pas compte de la modificateurs. Y a-t-il un moyen de vérifier cela? Comment aurais-je pu le comprendre par moi-même? (En ajoutant la réflexion à la liste des tags)
Cela est correct. Vous pouvez facilement obtenir la méthode de setter privé à partir d'un 'PropertyInfo' en utilisant' GetSetMethod (true) '. Je suis à peu près sûr que c'est ce que fait Linq to SQL. – Aaronaught