流れるようなメソッドを使用してクラスを拡張する場合、継承と返されるオブジェクトのタイプにより、流れるようなメソッドを呼び出す順序が重要になります。ベースからの流暢なメソッドは、継承された型からの流暢なメソッドを持たない基本型のオブジェクトを返します。ただし、メソッド呼び出しを逆にすれば問題ありません。
例えば:
public class Thing
{
public Thing DoThing()
{
return this;
}
}
public class ExtendedThing : Thing
{
public ExtendedThing DoExtendedThing()
{
return this;
}
}
// This works.
// DoExtendedThing returns an ExtendedThing object,
// which gets DoThing from Thing via inheritance
var extendedThing1 = new ExtendedThing().DoExtendedThing().DoThing();
// This doesn't work.
// DoThing returns a Thing object, which doesn't have
// DoExtendedThing on it
var extendedThing2 = new ExtendedThing().DoThing().DoExtendedThing()
どのように私はおそらく得ることができるDoThing
戻らないためにThing
、代わりのオブジェクトに戻る呼び出すオブジェクトはに拡張されているタイプ何でもそれは、そのタイプはコンパイル時に何であったか分からないでしょうにもかかわらず、。
それとも、流暢なメソッドを「正しい」順序で呼び出すことを知る必要がありますか?
これは次のパターンで解決できると思います。
class Base<T> where T : Base<T>
{
public T Thing()
{
return (T)this;
}
}
class Derived : Base<Derived>
{
public void AnotherThing()
{
Console.WriteLine("Hello!");
}
}
ラインのためにvar extended = new Derived().Thing();
、extended
コールする能力を持っていますAnotherThing()
。
それはあなたが探しているものですか?
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加