John
John

Reputation: 714

How to implement code like SomeObject.SomeFunction().SomeOtherFunction();

Today, I searched a line of code which was written like:

SomeObject.SomeFunction().SomeOtherFunction();

I am unable to understand this. I tried to search it on Google about this but no luck.

Please help me to understand this.

Upvotes: 0

Views: 151

Answers (6)

vishal mane
vishal mane

Reputation: 296

This can be done using extension methods

 public class FirstClass
{
}

public class SecondClass
{
}
public class ThridClass
{
}

public static class Extensions
{

    public static SecondClass GetSecondClass(this FirstClass f)
    {
        return new SecondClass();
    }
    public static ThridClass GetThridClass(this SecondClass s)
    {
        return new ThridClass();
    }
}

}

AND then you can ues

        FirstClass f= new FirstClass();
        f.GetSecondClass().GetThridClass();

Upvotes: 1

S.N
S.N

Reputation: 5150

This style of programming called FluentInterface style.

Eg:

internal class FluentStyle
    {
        public FluentStyle ConnectToDb()
        {
            // some logic
            return this;
        }
        public FluentStyle FetchData()
        {
            // some logic
            return this;
        }
        public FluentStyle BindData()
        {
            // some logic
            return this;
        }
        public FluentStyle RefreshData()
        {
            // some logic
            return this;
        }
    }

And the object can be created and method can be consumed as below;

  var fluentStyle = new FluentStyle();
     fluentStyle.ConnectToDb().FetchData().BindData().RefreshData();

Upvotes: 2

Peregrine
Peregrine

Reputation: 4556

This type of chaining may involve extension methods. These allow addition of new methods to existing classes (even those that you don't have the source code for).

e.g.

public static class StringExtender
{
    public static string MyMethod1(this string Input)
    {
        return ...
    }

    public static string MyMethod2(this string Input)
    {
        return ...
    }
}

....

public string AString = "some string";
public string NewString = AString.MyMethod1().MyMethod2(); 

Upvotes: 1

Eoin Campbell
Eoin Campbell

Reputation: 44308

Consider the following

public class FirstClass
{
    public SecondClass SomeFunction()
    {
        return new SecondClass();  
    }
}

public class SecondClass
{
    public void SomeOtherFunction()
    {

    }
}

So the following are equivalent.

 FirstClass SomeObject = new FirstClass();
 SomeObject.SomeFuntion().SomeOtherFunction();

OR

 FirstClass SomeObject = new FirstClass();
 SecondClass two = SomeObject.SomeFuntion();
 two.SomeOtherFunction();

Upvotes: 2

Belogix
Belogix

Reputation: 8147

This is called Fluent coding or method chaining and is a method of programming that allows you to chain commands together. It is very common in LINQ where you might have something like this:

var result = myList.Where(x => x.ID > 5).GroupBy(x => x.Name).Sort().ToList();

This would give you all the records greater than 5, then grouped by name, sorted and returned as a list. The same code could be written in long hand like this:

var result = myList.Where(x => x.ID > 5);
result = result.GroupBy(x => x.Name);
result = result.Sort();
result = result.ToList();

But you can see this is much more long winded.

Upvotes: 2

manabreak
manabreak

Reputation: 5597

SomeObject has a function called SomeFunction(). This function returns an object (of an unknown type for us, based on your example). This object has a function called SomeOtherFunction().

The question "how to implement" is a bit vague to answer, though.

Upvotes: 3

Related Questions