Сложно ответить на ваш вопрос, поскольку вы описали, что вы пытаетесь сделать, но не почему.Поэтому я должен попытаться угадать, что вы хотите.
Я бы не поместил фабричный метод в тот же класс, что и в другом ответе или вашем вопросе.Как бы вы справились с наследованием за один раз?Это работает для двух уровней, которые у вас есть.Но что, если вы хотите расширить ChildClass
?
Вместо этого я бы создал общую фабрику, используемую для создания объекта.Реализация имеет одноэлементный интерфейс, обернутый вокруг фабричного интерфейса, чтобы можно было легко расширить его или поменять местами реализацию.
class MyFactory
{
private static IMyFactory _instance;
public static void Assign(IMyFactory factory) { _instance = factory; }
public static T Create<T>() { return _instance.Create<T>(); }
}
interface IMyFactory
{
T Create<T>();
}
class MyFactoryImp : IMyFactory
{
//do whatever needed in here
public T Create<T>(){ return new T(); }
}
class BaseClass<T>
{
T Value {get; set;}
string Name {get; set;}
}
class ChildClass : BaseClass<int>
{
public void Test()
{
ChildClass bs = MyFactory.Create<ChildClass>(10);
}
}
// start with this, you can easily switch implementation
MyFactory.Assign(new MyFactoryImp());
Другой очевидный ответ - начать использовать контейнер Inversion Of Control, например, autofac.