How to implement method chaining?

后端 未结 4 1942
死守一世寂寞
死守一世寂寞 2021-02-08 20:27

In C# how does one implement the ability to chain methods in one\'s custom classes so one can write something like this:

myclass.DoSomething().DosomethingElse(x)         


        
相关标签:
4条回答
  • 2021-02-08 21:10

    DoSomething should return a class instance with the DoSomethingElse method.

    0 讨论(0)
  • 2021-02-08 21:12

    Chaining is a good solution to produce new instance from existing instances:

    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);
        }
    }
    

    Usage:

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

    You can also use this pattern to modify an existing instance, but this is generally not recommended:

    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;
        }
    }
    

    Usage:

    MyInt x = new MyInt(10).Add(5).Subtract(7);
    
    0 讨论(0)
  • 2021-02-08 21:20

    Your methods should return this or a reference to another (possibly new) object depending on exactly what you want to acheive

    0 讨论(0)
  • 2021-02-08 21:24

    For a mutable class, something like

    class MyClass
    {
        public MyClass DoSomething()
        {
           ....
           return this;
        }
    }
    
    0 讨论(0)
提交回复
热议问题