No puedo entender por qué se está buscando algo estático:No se puede acceder campo no estático
public class DatabaseBase
{
private readonly string connectionString;
public DatabaseBase(string connectionString)
{
this.connectionString = connectionString;
}
}
public class MyDB : DatabaseBase
{
readonly string connectionString = ConfigurationManager.AppSettings["MyConnectionString"];
public MyDB() : base(connectionString)
{
}
}
consigo No se puede acceder campo no estático 'connectionString' en el contexto estático. No veo nada estático en la clase base de la base de datos, ¿por qué?
aquí es otro ejemplo de cuando hicimos un poco lo mismo:
partial class Database : DatabaseBase
{
static string DbConnectionString
{
get
{
if (dbConnectionString == null)
dbConnectionString =
ConfigurationManager.AppSettings["MyConnectionString"];
return dbConnectionString;
}
}
public Database() :base(DbConnectionString)
{
}
bien así que ¿por qué tiene que ser una cadena estática para la cadena de conexión que pasar?
entonces, ¿cómo puedo enviar esa cadena de conexión al constructor base según sea necesario? – PositiveGuy
Sus soluciones están bien, pero su análisis es * completamente incorrecto *. El campo de entrada se inicializará antes de llamar al constructor base. El orden de construcción es: inicializadores de campo derivados, inicializadores de campo base, cuerpo constructor base, cuerpo constructor derivado. –
Vea mis artículos sobre este tema para saber por qué el orden es así: http://blogs.msdn.com/ericlippert/archive/2008/02/15/why-do-initializers-run-in-the-opposite-order -as-constructors-part-one.aspx y http://blogs.msdn.com/ericlippert/archive/2008/02/18/why-do-initializers-run-in-the-opposite-order-as-constructors -part-two.aspx –