使った別の合成メソッドが生成されます。コードの量が減ります。キーワードに言えることですが、生成されるコードを調べてみれば、そこでどのような魔法が使われているかを理解できます。投稿を確認してみてください。元に翻訳・加筆したものです。詳しくは元記事をご覧ください。その仕事を他者に委譲することです。皆さんの仕事を友だちに委譲することを言っているわけではありません。今回のテーマは、あるオブジェクトから別のオブジェクトに委譲することです。ソフトウェアの世界では、委譲という考え方は新しいものではありません。オブジェクトに委譲することでリクエストを処理することを指します。デリゲートの役割は、元のオブジェクトに代わってリクエストを処理し、その結果を元のオブジェクトが利用できるようにすることです。クラス委譲とプロパティ委譲をサポートしているので、委譲を簡単に扱えます。いくつかの独自の組み込みデリゲートも提供しています。機能だけですが、最後に削除された項目への参照が必要です。クラスを拡張することです。具象クラスの実装と強く結合されることになります。これを実現する方法が提供されています。インスタンスに作業の大半を委譲し、その動作をカスタマイズできます。クラス委譲の仕組みを確認してみましょう。インスタンスをデリゲートとして使用するコードを自動的に生成します。インターフェースのすべての機能をサポートします。独自の動作を追加することもできるようになります。動作の仕組みを確認してみましょう。コンパイラが実際にラッパー関数を作成していることを確認できます。オブジェクトの対応する関数を呼び出していることもわかります。パターンを使ってクラス委譲をサポートしています。クラスがデコレートされるクラスと同じインターフェースを共有します。メソッドをラップ(デコレート)します。委譲は、特定のクラスを継承できない場合に特に便利です。クラス委譲を使うと、クラスが他のクラスの階層に含まれることはなくなります。その代わり、同じインターフェースを共有し、元の型の内部オブジェクトをデコレートします。維持したまま、実装を簡単に入れ替えることができます。キーワードを使うと、クラス委譲だけでなく、プロパティを委譲することもできます。関数の呼び出しを担当します。ロジックを再利用しなければならない場合、対応するフィールドだけでなく機能を簡単に拡張することができるので、この機能が非常に便利です。クラスがあったとしましょう。プロパティには、いくつかのフォーマット要件があります。設定するとき、先頭の文字が大文字、他の文字が小文字になるようにします。プロパティを自動的にインクリメントします。この機能は、次のように実装してもいいかもしれません。インクリメントすることになるとどうでしょうか。書いていることに気づくでしょう。メソッドもほぼ同じということは、どちらかは不要ということです。プロパティに委譲してコードを再利用できます。使ってプロパティを委譲します。デリゲートを使うコードを生成します。クラスに委譲されます。コードを確認してみましょう。実装する必要があります。実装しなければなりません。つの追加パラメータがあることに気づいた方もいらっしゃるでしょう。プロパティを含むオブジェクトを表します。これを使うと、オブジェクト自体にアクセスし、他のプロパティを確認したり、他のクラス関数を呼び出したりできます。これは、委譲されたプロパティについてのメタデータにアクセスするために使うことができます。先ほどの要件を思い出してみてください。プロパティにアクセスし、インクリメントしてみましょう。