重複の可能性:流暢な API を作成する
C# でのメソッド チェーン
以下のコーディングを行うにはどうすればよいですか?
Class1 objClass1 = new Class1().Add(1).Add(2).Add(3)...
等々..
Add()
同じオブジェクトに反映される無限時間を呼び出すメソッドを実装するにはどうすればよいですか?
重複の可能性:流暢な API を作成する
C# でのメソッド チェーン
以下のコーディングを行うにはどうすればよいですか?
Class1 objClass1 = new Class1().Add(1).Add(2).Add(3)...
等々..
Add()
同じオブジェクトに反映される無限時間を呼び出すメソッドを実装するにはどうすればよいですか?
論理的には、呼び出し後に同じオブジェクトを使用する場合は、そのオブジェクトを返す必要があります。これは、メソッドでthisで参照されます。
class Class1
{
public Class1 Add(int num)
{
//TODO
return this;
}
}
これはメソッドチェーンのケースです。
これは連鎖可能なメソッドと呼ばれます。
Method chaining, also known as named parameter idiom, is a common technique for invoking multiple method calls in object-oriented programming languages. Each method returns an object (possibly the current object itself), allowing the calls to be chained together in a single statement.
Basicly, your method should return a current instance of your object.
public YourClass Add()
{
return this;
}
For a clean understanding of method chaining, here is the code converted from Java include in wikipedia page. The the setters return "this
" (the current Person
object).
using System;
namespace ProgramConsole
{
public class Program
{
public static void Main(string[] args)
{
Person person = new Person();
// Output: Hello, my name is Soner and I am 24 years old.
person.setName("Soner").setAge(24).introduce();
}
}
class Person
{
private String name;
private int age;
public Person setName(String name)
{
this.name = name;
return this;
}
public Person setAge(int age)
{
this.age = age;
return this;
}
public void introduce() {
Console.WriteLine("Hello, my name is " + name + " and I am " + age + " years old.");
}
}
}
このようなメソッド呼び出しをチェーンするには、オブジェクト自体を返す必要があります
public Class1 Add(Object Whatever)
{
// Do code here
return this;
}