-1
最終的に、スーパークラスメソッドを呼び出した後にサブクラスメソッドを呼び出したいと思います。私はこのようなサブクラスにスーパークラスをキャスト避けたいスーパークラスメソッドの呼び出し後にサブクラスメソッドを呼び出す
new SubClass()
.CommonMethod1()
.CommonMethod2() // Returns SuperClass
.OptionalLastMethod1(); // I would like to do something like this.
に:私はこのような何かをしたいと思います
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>();
}
}
:私はこのようなコードに何かを持っている
var subClass = ((SubClass)new SubClass().CommonMethod1().CommonMethod2()).LastMethodToCall();
ここでの重要な点は、使いやすさであり、実装の容易さではありません。すべての入力をいただければ幸いです。
このような流暢なコードの場合、(一般的な)拡張メソッドは、階層を超越する問題がなく、クラス作成者が陰気できる必要がなくなるため、お友達です。彼らがLINQと一緒に導入されたのは事実ではありません。 –
'OptionalLastMethod1'メソッドは' SuperClass'の一部ではないので、 'SubClass'インスタンスから直接呼び出すことができません。あなたはこのメソッドを 'SuperClass'にも持っていますし、' SuperClass'のために作成された拡張メソッドとしてこのメソッドを持たせることはできません。 –
@john私の本当の疑問は、(抽象化を使用せずに)スーパークラスからサブクラスメソッドを呼び出す方法です。あなたのリンクは、チェーンの作成方法について話します。 – Steven