我编写了一个包含很少类库的项目。 在下层我有一个类似这样的类:
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它不会得到我在主项目中创建的实例。 / p>
有没有办法让它发挥作用?
答案 0 :(得分:1)
只要第二类库引用了第一类库,你就应该能够做你的建议。
答案 1 :(得分:0)
如果第一个库没有对第二个库的引用,那么它就不知道该类的具体实现,因此它无法自己创建它的实例。
您必须告诉班级如何创建实例,例如:
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
属性。