调用超类方法后调用子类方法
问题描述:
最后,我想在调用超类方法后调用子类方法。我有一个代码是这样的:调用超类方法后调用子类方法
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();
这里的重点是易用性,不易于实施。任何输入赞赏。
答
通过这样做解决了这个问题。 - 删除了一些不相关的代码。
public class SuperClass<S> where S : SuperClass<S>
{
public S CommonMethod1()
{
// Do something
return (S) this;
}
public S CommonMethod2()
{
// Do something else
return (S) this;
}
// Many CommonMethods
}
public class SubClass : SuperClass<SubClass>
{
public WrapperClass<SomeClass> OptionalLastMethod1()
{
return base.GetWrapperClass<SomeClass>();
}
public WrapperClass<SomeOtherClass> OptionalLastMethod2()
{
return base.GetWrapperClass<SomeOtherClass>();
}
}
对于这样流利的代码,(通用)扩展方法是你的朋友,因为它们没有超越层次结构的麻烦,并且也不需要类作者具有透视性。他们与LINQ一起推出并非偶然。 –
'OptionalLastMethod1'方法不是'SuperClass'的一部分,这就是为什么你不能直接从'SubClass'实例调用它。你也可以在'SuperClass'中使用这种方法,而且这种方法不可能,那么这种方法作为为'SuperClass'创建的扩展方法是另一种选择。 –
@john我真正的问题是如何从超类调用子类方法(不使用抽象)。您的链接将讨论如何创建链接。 – Steven