я не могу понять, почему он ищет нечто статичное:не удается получить доступ к нестатическая поле
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)
{
}
}
я не удается получить доступ к нестатический поле «ConnectionString» в статическом контексте. Я не вижу ничего статического в базовом классе базы данных, так почему?
вот еще один пример, когда мы сделали любопытные то же самое:
partial class Database : DatabaseBase
{
static string DbConnectionString
{
get
{
if (dbConnectionString == null)
dbConnectionString =
ConfigurationManager.AppSettings["MyConnectionString"];
return dbConnectionString;
}
}
public Database() :base(DbConnectionString)
{
}
ИТАК, почему это должно быть статичной строкой для строки соединения будет принято?
Итак, как я могу отправить эту строку соединения в базовый конструктор по мере необходимости? – PositiveGuy
Ваши решения в порядке, но ваш анализ полностью неверен *. Поле intstance будет инициализировано до вызова базового конструктора. Порядок построения: инициализаторы производных полей, инициализаторы базового поля, тело базового конструктора, производное тело конструктора. –
См. Мои статьи по этому вопросу, почему заказ выполняется именно так: http://blogs.msdn.com/ericlippert/archive/2008/02/15/why-do-initializers-run-in-the-opposite-order -as-constructors-part-one.aspx и http://blogs.msdn.com/ericlippert/archive/2008/02/18/why-do-initializers-run-in-the-opposite-order-as-constructors -part-two.aspx –