Kotlin 中的代表团
委派控制任何对象从一个实例到另一个实例的权力/权限分配。对于类和函数实现,委托可以用于它们之间的静态和可变关系。类和函数中的继承实现可以在委托技术的帮助下进行更改,面向对象的编程语言天生就支持它,而无需任何样板代码。 Kotlin 中借助“by”关键字使用委托。
Kotlin 中有两种类型的委托:
•显式委托:所有面向对象的语言都支持,它是通过将委托(要实现的那个)对象传递给委托对象(将实现委托对象的那个)来完成的。
•隐式委派:需要对委派模式的语言级支持。
让我们借助示例讨论委托的概念:
示例 1:
正如我们所知,在 Kotlin 中,继承为我们提供了在委托时不可变的对象之间的永久静态关系,这一事实使委托成为一个非常强大的替代方案。在这个例子中, 使用 Newfeature 类,我们可以通过委托其所有公共成员(即 mymessage 和 messageline)来实现具有新功能的委托基类,我们在“by”关键字的帮助下使用此实现。
Kotlin
// Kotlin program to illustrate the
// concept of delegation
interface delegation
{
fun mymessage()
fun mymessageline()
}
class delegationimplementation(val y: String) : delegation
{
override fun mymessage()
{
print(y)
}
override fun mymessageline()
{
println(y)
}
}
class Newfeature(m: delegation) : delegation by m
{
override fun mymessage()
{
print("GeeksforGeeks")
}
}
// Main function
fun main()
{
val b = delegationimplementation("\nWelcome, GFG!")
Newfeature(b).mymessage()
Newfeature(b).mymessageline()
}
Kotlin
// Kotlin program to illustrate the
// concept of delegation
interface delegation
{
val value: String
fun mymessage()
}
class delegationimplementation(val y: String) : delegation
{
override val value = "delegationimplementation y = $y"
override fun mymessage()
{
println(value)
}
}
class Newfeatures(a: delegation) : delegation by a
{
override val value = "GeeksforGeeks"
}
fun main()
{
val b = delegationimplementation("Hello!GFG")
val derived = Newfeatures(b)
derived.mymessage()
println(derived.value)
}
输出:
GeeksforGeeks
Welcome, GFG!
示例 2:
在此示例中,我们有一个委托基类,其 val 值和方法“fun message()”。在委托实现类中,我们为这个“有趣的消息”赋值,稍后我们在另一个类中使用这个实现,使用“by”关键字添加一个具有相同 val 值的新语句;
科特林
// Kotlin program to illustrate the
// concept of delegation
interface delegation
{
val value: String
fun mymessage()
}
class delegationimplementation(val y: String) : delegation
{
override val value = "delegationimplementation y = $y"
override fun mymessage()
{
println(value)
}
}
class Newfeatures(a: delegation) : delegation by a
{
override val value = "GeeksforGeeks"
}
fun main()
{
val b = delegationimplementation("Hello!GFG")
val derived = Newfeatures(b)
derived.mymessage()
println(derived.value)
}
输出:
delegationimplementation y = Hello!GFG
GeeksforGeeks
好处:
1.它是一种灵活、强大且可变的方法。
2. 可以在已有接口的帮助下实现多个接口。
3. 它用于为当前的实现添加新的特性和价值。