Nie mogę zrozumieć, dlaczego to szuka czegoś statycznego:nie można uzyskać dostępu do pola niestatyczny
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)
{
}
}
otrzymuję Nie można uzyskać dostępu pola niestatycznego „connectionString” w kontekście statycznej. Nie widzę nic statycznego w bazie bazy danych, więc dlaczego?
oto kolejny przykład kiedy zrobiliśmy trochę to samo:
partial class Database : DatabaseBase
{
static string DbConnectionString
{
get
{
if (dbConnectionString == null)
dbConnectionString =
ConfigurationManager.AppSettings["MyConnectionString"];
return dbConnectionString;
}
}
public Database() :base(DbConnectionString)
{
}
ok, więc dlaczego to musi być statyczny ciąg na ciąg połączenia mają być przekazywane?
więc jak mogę wysłać ten ciąg połączenia do konstruktora bazowego, jak jest to wymagane? – PositiveGuy
Twoje rozwiązania są w porządku, ale twoja analiza jest * całkowicie niepoprawna *. Pole intencji zostanie zainicjowane przed wywołaniem konstruktora podstawowego. Kolejność budowania idzie: inicjatory pól pochodnych, inicjatory pól bazowych, korpus konstruktora bazowego, pochodne konstruktory. –
Zobacz moje artykuły na ten temat, dlaczego zamówienie jest w ten sposób: http://blogs.msdn.com/ericlippert/archive/2008/02/15/why-do-initializers-run-in-the-opposite-order -as-constructors-part-one.aspx i http://blogs.msdn.com/ericlippert/archive/2008/02/18/why-do-initializers-run-in-the-opposite-order-as-constructors -part-two.aspx –