2010-01-13 2 views
4

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

myclass.DoSomething().DosomethingElse(x); 

и т.д ...

спасибо!

+0

См. http://stackoverflow.com/questions/1119799/method-chaining-in-c –

ответ

10

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

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); 
+0

+1 Для хорошего примера. Как правило, эта концепция называется Fluent Interface - см. Http://en.wikipedia.org/wiki/Fluent_interface. Хотя технически вы его не используете, но было бы тривиально ввести его. –

1

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

1

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

class MyClass 
{ 
    public MyClass DoSomething() 
    { 
     .... 
     return this; 
    } 
} 
0

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

Смежные вопросы