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);
}
No he estado utilizando el modificador privada, ya que funciona y me mantuvo de ser estúpido con mi código, pero ahora que tengo que crear una nueva Foo, acabo eliminó el modificador privado de mi propiedad. Solo tengo curiosidad, ¿por qué el ExecuteQuery se convierte en un trabajo de IEnumerable of Foo?propiedades de inicialización con conjuntos particulares en .Net
EDITAR Ok, por lo que el modificador privada no puede ver la reflexión de la incubadora, y de las respuestas, parece que ExecuteQuery (o es el contexto de datos?) Utiliza la reflexión para obtener los nombres de propiedad e ignora el modificadores. ¿Hay alguna manera de verificar eso? ¿Cómo podría haberlo descubierto por mi cuenta? (Adición de reflexión a la lista de etiquetas)
Esto es correcto. Puede obtener fácilmente el método privado setter de un 'PropertyInfo' utilizando' GetSetMethod (true) '. Estoy bastante seguro de que esto es lo que hace Linq to SQL. – Aaronaught