fun main(arg: Array<String>) {    val myClass1 = myClass1()    myClass1.name="mycalsss1"    val myClass2 = myClass2()    myClass2.name="myclass2"    println(myClass1.name)    println(myClass2.name)}class myClass1{    var name:String =""    get() :String{        println("mycalsss1.get 被调用")        return field    }    set(value:String) {        println("myclass1.set 被调用")        field=value    }}class myClass2{    var name:String =""        get() :String{            println("mycalsss2.get 被调用")            return field        }        set(value:String) {            println("myclass2.set 被调用")            field=value        }}

输入:

myclass1.set 被调用myclass2.set 被调用mycalsss1.get 被调用mycalsss1mycalsss2.get 被调用myclass2

下面代码冗余,所谓委托类,就是一个蕴含getValue和setValue函数的类,这两个函数operator申明

在应用委托类时,须要by关键字,创立委托类实例的代码放在by前面

如下

import kotlin.reflect.KPropertyfun main(arg: Array<String>) {    val myClass1 = myClass1()    myClass1.name = "mycalss1"    val myClass2 = myClass2()    myClass2.name = "myclass2"    println(myClass1.name)    println(myClass2.name)}class delegate {    var name: String = ""    operator fun getValue(thisRef: Any?, property: KProperty<*>): String {        val classname = thisRef.toString().substringBefore("@")        println("$classname get被调用")        return name    }    operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {        val classname = thisRef.toString().substringBefore("@")        println("$classname set被调用")        name = value    }}class myClass1 {    var name: String by delegate()}class myClass2 {    var name: String by delegate()}````输入后果和下面一样!