Как реализовать метод цепочки? - PullRequest
5 голосов
/ 13 января 2010

В C # как реализовать возможность цепочки методов в своих пользовательских классах, чтобы можно было написать что-то вроде этого:

myclass.DoSomething().DosomethingElse(x); 

и т.д ...

Спасибо!

Ответы [ 4 ]

12 голосов
/ 13 января 2010

Цепочка является хорошим решением для создания нового экземпляра из существующих экземпляров:

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);
1 голос
/ 13 января 2010

Для изменчивого класса, что-то вроде

class MyClass
{
    public MyClass DoSomething()
    {
       ....
       return this;
    }
}
1 голос
/ 13 января 2010

DoSomething должен возвращать экземпляр класса с помощью метода DoSomethingElse.

0 голосов
/ 13 января 2010

Ваши методы должны возвращать this или ссылку на другой (возможно, новый) объект в зависимости от того, что именно вы хотите получить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...