У меня есть несколько классов, для которых я хотел бы использовать цепочечные методы, чтобы обеспечить свободный стиль конфигурации.
Например,
public class BaseFoo
{
private bool _myProp = false;
public [[[BaseFoo?]]] SetMyProperty()
{
this._myProp = true;
return this;
}
}
public class DerivedFoo : BaseFoo
{
public bool _derivedProp = false;
public DerivedFoo SetDerivedPropery()
{
this._derivedProp = true;
return this;
}
}
Проблема очевидна, когда я пытаюсь связать их вместе,как только я использую базовый метод, возвращается тип BaseFoo.Очевидно, я мог бы привести это обратно к DerivedFoo, но есть ли простой способ вернуть объект типа производного класса.
Единственный способ, которым я могу думать об этом - объединить конструкторы и передать в родительский типв первоначальный конструктор, но с использованием синтаксиса.
Другим способом было бы иметь подобные прокси-методы для каждого из подклассов, но возвращая производный тип.
DerivedFoo foo = new DerivedFoo();
foo.SetMyProperty().SetDerivedPropery(); // wont work because the SetMyProperty returns type of BaseFoo
foo.SetDerivedPropery().SetMyProperty(); // works because I know i'm calling the method of the derived class first
(foo.SetMyProperty() as DerivedFoo).SetDerivedPropery(); // works as i'm casting result of base method to derived type
есть идеи?
Заранее спасибо,
Сэм