Pregunta

En C # ¿cómo se puede poner en práctica la capacidad de métodos de cadenas en clases personalizadas de uno lo que uno puede escribir algo como esto:

myclass.DoSomething().DosomethingElse(x); 

etc ...

Gracias!

¿Fue útil?

Solución

Chaining es una buena solución para producir nueva instancia de instancias existentes:

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

Uso:

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

También puede utilizar este modelo para modificar una instancia existente, pero esto generalmente no se recomienda:

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

Uso:

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

Otros consejos

HacerAlgo debe devolver una instancia de la clase con el método DoSomethingElse.

Para una clase mutable, algo así como

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

Sus métodos deben volver this o una referencia a otro (posiblemente nuevo) objeto dependiendo exactamente lo que quiere acheive

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top