2

クラスライブラリがほとんどないプロジェクトを書いています。下層には、次のようなクラスがあります。

namespace firstclasslibrary
{

    public abstract class Base<T> where T :SomeClass
    {
            public static Base<T> Current 
            { 
                 get 
                 {
                       return new Base() ;
                 }
            }
    }
}

そして、別のクラスライブラリに次のものがあります:

namespace secondclasslibrary
{
      public class Derived : Base
      {
           ///some kind of singleton ....
      }
}

最初のクラス ライブラリには、次のような抽象クラスを使用する別のクラスがあります。

namespace firstclasslibrary
{
      public class JustAClass
      {
            public Base<SomeClass> baseclass = baseclass.Current;


            ////do some other things.....
      }
}

すべてのクラスが同じクラス ライブラリの下にある場合、 Derived のインスタンスを取得できましたが、別のライブラリであるため null を取得し、メイン プロジェクトで作成したインスタンスを取得できません。

それを機能させる方法はありますか?

4

2 に答える 2

1

2 番目のクラス ライブラリが最初のクラス ライブラリへの参照を持っている限り、あなたが提案していることを実行できるはずです。

于 2013-03-28T13:34:11.327 に答える
0

最初のライブラリが 2 番目のライブラリへの参照を持っていない場合、クラスの具体的な実装について認識していないため、独自にそのインスタンスを作成することはできません。

インスタンスの作成方法をクラスに指示する必要があります。次に例を示します。

namespace firstclasslibrary {

  public abstract class Base {

    private static Base _current = null;

    public static Func<Base> CreateInstance;

    public static Base Current { 
      get {
        if (_current == null) {
          _current = CreateInstance();
        }
        return _current;
      }
    }

  }

}

プロパティを使用する前に、インスタンスを作成する方法をクラスに「学習」させるために、プロパティCurrentを設定する必要があります。CreateInstance

Base.CreateInstance = () => new Derived();

_currentプロパティを保護することでこれを拡張することもできます。これにより、プロパティDerivedを使用する代わりにクラスのインスタンスを作成した場合に、クラスのコンストラクターが自身を現在のインスタンスとして設定できるようになりCurrentます。

于 2013-03-28T13:56:53.213 に答える