今天,我搜索的代碼行其是這樣寫的:如何實現代碼SomeObject.SomeFunction()。SomeOtherFunction();
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();
OR
FirstClass SomeObject = new FirstClass();
SecondClass two = SomeObject.SomeFuntion();
two.SomeOtherFunction();
太棒了。 。 。 。謝謝你Eoin! – John
完全沒問題。其他答案也是相關的,關於爲Fluent API實現擴展或鏈接方法,但我認爲這是最簡單的OO示例來演示它 –
SomeObject有一個叫做SomeFunction()的函數。這個函數根據你的例子返回一個對象(對我們來說是一個未知的類型)。該對象有一個名爲SomeOtherFunction()的函數。
的問題是「如何實現」是一個比較含糊的回答,雖然。
這就是所謂的流利編碼或方法鏈,並且是一種編程方法,允許您將命令鏈接在一起。它是在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();
最佳答案,告訴你它是什麼,以及如何創建它。 – cjb110
這種類型的鏈接的可能涉及擴展方法。這些允許將新方法添加到現有類(即使那些沒有源代碼的類)。
例如
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();
即'SomeFunction()'返回其具有方法的對象'someOtherFunction()'。 – NINCOMPOOP
'SomeObject。SomeFunction()只是返回一個具有「SomeOtherFunction」方法的類型的值,沒有什麼特別的。就像你寫了'user.GetFullName()。ToLower將()'。 – Jon
嘗試使用單詞'方法鏈接'搜索 – V4Vendetta