ich kann nicht herausfinden, warum es für etwas Statisches suchen ist:Keinen Zugriff auf nicht-statisches Feld
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)
{
}
}
ich zugreifen kann nicht nicht-statisches Feld ‚Connection‘ in statischem Kontext erhalten. Ich sehe nichts statisches in der Basis-Datenbank-Klasse, also warum?
hier ist ein weiteres Beispiel dafür, wann wir haben irgendwie das Gleiche:
partial class Database : DatabaseBase
{
static string DbConnectionString
{
get
{
if (dbConnectionString == null)
dbConnectionString =
ConfigurationManager.AppSettings["MyConnectionString"];
return dbConnectionString;
}
}
public Database() :base(DbConnectionString)
{
}
ok so, warum hat es eine statische Zeichenfolge für die Verbindungszeichenfolge sein müssen weitergegeben werden?
also wie kann ich diese Verbindungszeichenfolge an den Basiskonstruktor wie erforderlich senden? – PositiveGuy
Ihre Lösungen sind in Ordnung, aber Ihre Analyse ist * völlig inkorrekt *. Das Intstance-Feld wird initialisiert, bevor der Basiskonstruktor aufgerufen wird. Die Reihenfolge der Konstruktion lautet: abgeleitete Feldinitialisierer, Basisfeldinitialisierer, Basiskonstruktorkörper, abgeleiteter Konstruktorkörper. –
Siehe meine Artikel zu diesem Thema für warum die Bestellung so ist: http://blogs.msdn.com/ericlippert/archive/2008/02/15/why-do-initializers-run-in-the-opposite-order -as-constructors-part-one.aspx und http://blogs.msdn.com/ericlippert/archive/2008/02/18/why-do-initializers-run-in-the-opposite-order-as-constructors -part-two.aspx –