如何实现SomeObject.SomeFunction(). someotherfunction()等代码

本文关键字:someotherfunction 代码 SomeFunction SomeObject 实现 何实现 | 更新日期: 2023-09-27 18:16:09

今天,我搜索了这样一行代码:

SomeObject.SomeFunction().SomeOtherFunction();

我无法理解这个。我试着在谷歌上搜索,但没有运气。

如何实现SomeObject.SomeFunction(). someotherfunction()等代码

SomeObject有一个名为SomeFunction()的函数。这个函数返回一个对象(根据你的例子,对我们来说是未知类型的)。该对象有一个名为SomeOtherFunction()的函数。

"如何实现"这个问题回答起来有点模糊。

考虑以下

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

这被称为Fluent编码或方法链,是一种允许您将命令链在一起的编程方法。这在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();

但是你可以看到这更冗长

这种编程风格叫做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();

这种类型的链接可能涉及扩展方法。这些允许在现有类中添加新方法(甚至是那些没有源代码的类)。

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

这可以使用扩展方法完成

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

}

然后可以使用

        FirstClass f= new FirstClass();
        f.GetSecondClass().GetThridClass();
相关文章:
  • 没有找到相关文章