原本在開發程式的時候,一個物件的 instant 如果需要連續地執行某些動作時,程式會類似下面範例程式。
using System;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
var c = new MyClass();
c.Do1();
c.Do2();
c.Do3();
}
}
internal class MyClass
{
public void Do1()
{
Console.WriteLine("Do1");
}
public void Do2()
{
Console.WriteLine("Do2");
}
public void Do3()
{
Console.WriteLine("Do3");
}
}
}
instance c 必須呼叫 Do1, Do2, Do3, instance c 必須寫三次 c., c., c.
Method Chaining 則是另一種物件行為的設計方式。將上述 MyClass 的 void Method 改回傳物件本身,就可以達到另一種呼叫方式。
using System;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
var c = new MyClass();
c.Do1().Do2().Do3();
}
}
internal class MyClass
{
public MyClass Do1()
{
Console.WriteLine("Do1");
return this;
}
public MyClass Do2()
{
Console.WriteLine("Do2");
return this;
}
public MyClass Do3()
{
Console.WriteLine("Do3");
return this;
}
}
}
看到了嗎?可以改成 c1.Do1().Do2().Do3() 的方式來呼叫,是不是很簡潔呢?
使用 Method chaining 的 API,是源自 small talk 語言的習慣,近來的 jQuery 大量地使用這樣的設計,方便程式開發人員使用。
這樣也有個缺點,會造成程式可讀性較差。總地來說,還是優點較大呢。