2 つのメンバーを持つDAL基本クラス ( data access ) があります。
/*1*/ class BaseDal
/*2*/ {
/*3*/ static DatabaseProviderFactory factory = new DatabaseProviderFactory();
/*4*/ static SqlDatabase sqlServerDB = factory.Create("ExampleDatabase") as SqlDatabase;
/*5*/ }
/*6*/
/*7*/
/*8*/ subclasses :
/*9*/
/*10*/ class MyCustomerDal:BaseDal
/*11*/ {
/*12*/ ...
/*13*/ ...
/*14*/ public static DataTable GetData()
/*15*/ {
/*16*/ // do something....
/*17*/ }
/*18*/
/*19*/ }
/*20*/
私の質問は、行 3,4 についてです。
new MyCustomerDal
インスタンスを必要とせず、メソッドGetData()
( ) を使用するためだけに作成していないことに注意してくださいstatic
。また、これらの 2 行はすべての派生クラスを提供できます。
そして、ここに私の質問があります:
これらの 2 つのイニシャライザ (3,4 行目) を遅延初期化する必要があります。
私には2つのオプションがあります:
オプション1
基本的に、クラスがアクセスされたときにのみこれらのメンバーが実行されることを意味する静的ctorを設定できます(beforefieldinit
問題)。
オプション 2
Lazy
:(+property)を使用できます
/*1*/ Lazy<SqlDatabase> myDb = new Lazy<SqlDatabase>(() => factory.Create("ExampleDatabase") as SqlDatabase);
/*2*/
/*3*/ protected SqlDatabase Mydb
/*4*/ {
/*5*/ get { return myDb.Value; }
/*6*/ }
しかし、正直なところ、どちらのアプローチが優れているかはわかりません....