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);
}
Я только что использовал модификатор private, потому что он работает и не позволяет мне быть глупым с моим кодом, но теперь, когда мне нужно создать новый Foo, я только что удалил модификатор private из своего свойства. Мне просто очень любопытно, почему ExecuteQuery превращает IEnumerable в работу Foo?
РЕДАКТИРОВАТЬ Хорошо, поэтому закрытый модификатор не препятствует отражению видеть установщик, и из ответов получается, что ExecuteQuery (или это контекст данных?) Использует отражение для получения имен свойств и игнорирует модификаторы. Есть ли способ проверить это? Как я мог понять это самостоятельно? (добавление отражения в список тегов)