2016-08-16 4 views
0

「拡張受信機」との間の差があるので、私不思議ですレシーバ・オブジェクト延長レシーバ同じ?またはその名前はコンテキストに依存していますか? レシーバオブジェクトディスパッチ受信又は延長レシーバのいずれかである「レシーバ・オブジェクト」とそれはドキュメント</p> <p><a href="https://kotlinlang.org/docs/reference/extensions.html" rel="nofollow">https://kotlinlang.org/docs/reference/extensions.html</a>た内容に応じて、伝えるのは難しい

答えて

5

延長レシーバレシーバオブジェクトあります。

クラス内では、別のクラスの拡張機能を宣言できます。このような内線番号の中には、の暗黙的な受信者があります。そのメンバーには修飾子なしでアクセスできます。拡張が宣言されたクラスのインスタンスはディスパッチレシーバと呼ばれ、拡張メソッドの受信者タイプのインスタンスは拡張受信者と呼ばれます。

class D { 
    fun bar() { ... } 
} 

class C { 
    fun baz() { ... } 

    fun D.foo() { 
     bar() // calls D.bar 
     baz() // calls C.baz 
    } 

    fun caller(d: D) { 
     d.foo() // call the extension function 
    } 
} 

上記の例では関数fooは、二つ暗黙のレシーバ有する:Cディスパッチ受信D延長レシーバです。 fooclass Cの外に宣言された場合、それは拡張受信機Dとなる1つの受信機のみを有する。要するに

レシーバオブジェクト延長レシーバは同じであってもよいが、ディスパッチ受信呼ばレシーバオブジェクトの別のタイプもあります。

詳細については、Declaring Extensions as Members - Extensions - Kotlin Programming Languageを参照してください。

+1

ありがとう、この文はすべて私にとってはっきりしています "もしfooがクラスCの外で宣言されたならば、それは拡張受信者Dとなる受信者を1つしか持たないでしょう。 –

関連する問題

 関連する問題