Як рэалізаваць падобны код SomeObject.SomeFunction () SomeOtherFunction ().

Сёння я шукаў радок кода, які быў напісаны, як:

SomeObject.SomeFunction().SomeOtherFunction();

Я не магу гэтага зразумець. Я спрабаваў знайсці яго на Google пра гэта, але не пашанцавала.

Калі ласка, дапамажыце мне зразумець гэта.

0
То SomeFunction() вяртае аб'ект, які мае метад someOtherFunction() .
дададзена аўтар NINCOMPOOP, крыніца
<�Код> SomeObject.SomeFunction() проста вяртае значэнне тыпу, які мае метад SomeOtherFunction , няма нічога асаблівага ў ёй. Гэта так жа, як калі б вы напісалі, напрыклад, <�Код> user.GetFullName (). ToLower() .
дададзена аўтар Jon, крыніца
SomeObject мае метад SomeFunction які вяртае аб'ект, які сам па сабе выстаўляе SomeOtherFunction.
дададзена аўтар David Brabant, крыніца
Паспрабуйце пошук з дапамогай слоў метад ланцужкі
дададзена аўтар V4Vendetta, крыніца

6 адказы

SomeObject мае функцыю пад назвай SomeFunction (). Гэта функцыя вяртае аб'ект (невядомага тыпу для нас, грунтуючыся на вашым прыкладзе). Гэты аб'ект мае функцыю з імем SomeOtherFunction ().

Пытанне «як рэалізаваць» крыху расплывістым, каб адказаць, хоць.

3
дададзена

Разгледзім наступны прыклад

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

public class SecondClass
{
    public void SomeOtherFunction()
    {

    }
}

Такім чынам, наступнае эквівалентныя.

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

АБО

 FirstClass SomeObject = new FirstClass();
 SecondClass two = SomeObject.SomeFuntion();
 two.SomeOtherFunction();
2
дададзена
Няма праблем. Іншыя адказы актуальныя, а таксама з пажаданнямі рэалізацыі пашырэнняў або ланцужкоў метадаў Fluent API, але я думаю, што гэта самае спрошчаны прыклад OO, каб прадэманстраваць яго
дададзена аўтар Eoin Campbell, крыніца
Высокі. , , , Дзякуй Eoin !!!
дададзена аўтар John, крыніца

Гэты стыль праграмавання называецца FluentInterface стыль.

напрыклад:

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

А аб'ект можа быць створаны і метад можа быць спажыта, як паказана ніжэй;

  var fluentStyle = new FluentStyle();
     fluentStyle.ConnectToDb().FetchData().BindData().RefreshData();
2
дададзена
Лепшы адказ, кажа вам, што гэта такое, і як яго стварыць.
дададзена аўтар cjb110, крыніца

Гэта называецца <�моцны> свабодны <�моцны /> кадаваньне або метад ланцужкі і метад праграмавання, які дазваляе камандам ланцугу разам. Вельмі часта ў LINQ, дзе вы маглі б мець нешта накшталт гэтага:

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

Гэта дасць вам усе запісы больш за 5, а затым згрупаваных па імені, адсартаваныя і вяртаюцца ў выглядзе спісу. Той жа самы код можа быць запісаны ў доўгага боку, як гэта:

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

Але вы можаце бачыць, што гэта значна больш доўга намотваецца.

2
дададзена

Гэты тып счаплення можа ўключаць у сябе метады пашырэння. Гэта дазваляе дадаваць новыя метады да існуючых класах (нават тыя, што ў вас няма зыходнага кода).

напрыклад

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(); 
1
дададзена

Гэта можа быць зроблена з дапамогай метадаў пашырэння

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

}

І тады вы можаце Ues

        FirstClass f= new FirstClass();
        f.GetSecondClass().GetThridClass();
1
дададзена