tengo una clase repositorio y una Clase de Servicios de la siguiente manera:¿Un inicializador de campo no puede hacer referencia al campo, método o propiedad no estático?
public class DinnerRepository
{
DinnerDataContext db = new DinnerDataContext();
public Dinner GetDinner(int id)
{
return db.Dinners.SingleOrDefault(d => d.DinnerID == id);
}
// Others Code
}
public class Service
{
DinnerRepository repo = new DinnerRepository();
Dinner dinner = repo.GetDinner(5);
// Other Code
}
Esto arroja error:
A field initializer cannot reference the non-static field, method, or property.
Aunque he intatiated la Clase DinnerRepository para exponer su método GetDinner() en el Servicio Clase. Esto funciona bien con el siguiente código. ¿Hay alguna alternativa o es una práctica estándar? No puedo utilizar los métodos estáticos aquí ..
public class Service
{
public Service()
{
DinnerRepository repo = new DinnerRepository();
Dinner dinner = repo.GetDinner(5);
}
}
Sí, la versión actual dice "dado que tenemos un error de tiempo de compilación en' simple-name's, hacemos que la referencia 'this' sea un error", y no al revés. – SWeko
@JonSkeet El motivo de este comportamiento es que los campos se inicializan antes que el constructor. Entonces, no hay ningún miembro de instancia cuando intentas inicializar los campos. Es por eso que no puedes usarlos antes de que la clase sea instanciada ¿Correcto? – UfukSURMEN
@UfukSURMEN: No realmente ... el objeto ya existe, pero invitaría a algunos errores bastante difíciles de razonar. (A veces es muy molesto, de verdad ...) –