9

C# では、カスタム クラスでメソッドをチェーンする機能をどのように実装して、次のように記述できるようにしますか。

myclass.DoSomething().DosomethingElse(x); 

等...

ありがとう!

4

4 に答える 4

16

チェーンは、既存のインスタンスから新しいインスタンスを生成するための優れたソリューションです。

public class MyInt
{
    private readonly int value;

    public MyInt(int value) {
        this.value = value;
    }
    public MyInt Add(int x) {
        return new MyInt(this.value + x);
    }
    public MyInt Subtract(int x) {
        return new MyInt(this.value - x);
    }
}

使用法:

MyInt x = new MyInt(10).Add(5).Subtract(7);

このパターンを使用して既存のインスタンスを変更することもできますが、これは一般的に推奨されません。

public class MyInt
{
    private int value;

    public MyInt(int value) {
        this.value = value;
    }
    public MyInt Add(int x) {
        this.value += x;
        return this;
    }
    public MyInt Subtract(int x) {
        this.value -= x;
        return this;
    }
}

使用法:

MyInt x = new MyInt(10).Add(5).Subtract(7);
于 2010-01-13T09:46:20.900 に答える
1

DoSomething は DoSomethingElse メソッドでクラス インスタンスを返す必要があります。

于 2010-01-13T09:42:31.560 に答える
1

可変クラスの場合、次のようなもの

class MyClass
{
    public MyClass DoSomething()
    {
       ....
       return this;
    }
}
于 2010-01-13T09:44:55.067 に答える
0

メソッドはthis、正確に何を達成したいかによって、別の (おそらく新しい) オブジェクトへの参照を返す必要があります。

于 2010-01-13T09:48:03.303 に答える