Я пытаюсь заставить наследника абстрактного класса инициализировать одно из полей в базе.
Я не могу сделать это с помощью конструктора в базе, потому что тип поля требуетссылка на объект, создающий его.(Полагаю, я мог бы предоставить ctor без параметров для типа поля. Но я чувствую, что это просто переместит проблему, и в любом случае она должна быть неизменной).
Возможно, кто-то может подсказать, как это сделать, или, может быть,сделать так, чтобы мне вообще не нужно было это делать?
Это почти то, что я делаю:
public abstract class Base
{
// Would like to force setting in CTOR
protected BaseImplementation _implementation;
protected BaseImplementation Implementation
{ get { return _implementation; } }
public void DoSomething()
{
Implementation.DoSomething();
}
}
public abstract class BaseImplementation
{
public abstract void DoSomething();
}
public class MyObject : Base
{
// Note its Nested
public class MyImplementation : BaseImplementation
{
private MyObject _myObject;
public MyImplementation(MyObject myObject)
{
this._myObject = myObject;
}
public override void DoSomething()
{
// Does something
}
public virtual void SomethingElse()
{
// Does something else
}
}
new public MyImplementation Implementation
{
get { return (MyImplementation) _implementation; }
}
public void SomethingElse()
{
Implementation.SomethingElse();
}
}
Чтобы дать небольшой контекст, у меня есть несколькоклассы, которые наследуются от базы.У стажера есть несколько способов, которыми они могут манипулировать своим состоянием.Это было лучшее решение, которое я придумал для обработки этого.
Edit
Я забыл упомянуть, что я не использую свойство Abstract, потому что это означает, что я не могу использовать new public MyImplementation Implementation {...
,Я не хочу приводить реализацию к MyImplementation всякий раз, когда я использую функциональность, специфичную для производного класса (таким образом, используя new
в первую очередь) , или создаю несколько полей, содержащих один и тот же объект.