-1
最後,我想在調用超類方法後調用子類方法。我有一個代碼是這樣的:調用超類方法後調用子類方法
public class SuperClass
{
protected WrapperClass<T> GetWrapperClass<T>()
{
return new WrapperClass(someStuff).Wrap<T>();
}
public SuperClass CommonMethod1()
{
// Do something
return this;
}
public SuperClass CommonMethod2()
{
// Do something else
return this;
}
// Many CommonMethods
}
public class SubClass : SuperClass
{
public WrapperClass<SomeClass> OptionalLastMethod1()
{
return base.GetWrapperClass<SomeClass>();
}
public WrapperClass<SomeOtherClass> OptionalLastMethod2()
{
return base.GetWrapperClass<SomeOtherClass>();
}
}
我願做這樣的事情:
new SubClass()
.CommonMethod1()
.CommonMethod2() // Returns SuperClass
.OptionalLastMethod1(); // I would like to do something like this.
我想避免鑄造父類到子類是這樣的:
var subClass = ((SubClass)new SubClass().CommonMethod1().CommonMethod2()).LastMethodToCall();
這裏的重點是易用性,不易於實施。任何輸入讚賞。
對於這樣流利的代碼,(通用)擴展方法是你的朋友,因爲它們沒有超越層次結構的麻煩,並且也不需要類作者具有透視性。他們與LINQ一起推出並非偶然。 –
'OptionalLastMethod1'方法不是'SuperClass'的一部分,這就是爲什麼你不能直接從'SubClass'實例調用它。你也可以在'SuperClass'中使用這種方法,而且這種方法不可能,那麼這種方法作爲爲'SuperClass'創建的擴展方法是另一種選擇。 –
@john我真正的問題是如何從超類調用子類方法(不使用抽象)。您的鏈接將討論如何創建鏈接。 – Steven