2

重複の可能性:流暢な API を作成する
C# でのメソッド チェーン

以下のコーディングを行うにはどうすればよいですか?

Class1 objClass1 = new Class1().Add(1).Add(2).Add(3)...

等々..

Add()同じオブジェクトに反映される無限時間を呼び出すメソッドを実装するにはどうすればよいですか?

4

3 に答える 3

5

論理的には、呼び出し後に同じオブジェクトを使用する場合は、そのオブジェクトを返す必要があります。これは、メソッドでthisで参照されます。

class Class1
{
    public Class1 Add(int num)
    {
        //TODO
        return this;
    }
}

これはメソッドチェーンのケースです。

于 2013-01-07T09:26:16.190 に答える
4

これは連鎖可能なメソッドと呼ばれます。

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.");
        }
    }
}
于 2013-01-07T09:27:53.303 に答える
1

このようなメソッド呼び出しをチェーンするには、オブジェクト自体を返す必要があります

public Class1 Add(Object Whatever)
{
    // Do code here
    return this;
}
于 2013-01-07T09:26:46.433 に答える