之前我使用过C#,我们可以定义一个struct
,它将是一个值类型。我现在正在学习Kotlin,据我所知,kotlin data-class
按价值进行比较,可以按值复制等。在网上发现了一些关于此的讨论,但这并不简单,我想要有C#技术娴熟的人Kotlin清除了这一点:我可以将Kotlin的data class
解释为C#struct
并将其称为一天吗?如果不是,有什么区别?
答案 0 :(得分:5)
Kotlin数据类和C#结构的主要区别在于Kotlin数据类仍然是类,它们通过引用传递(引用类型,以C#表示)并存储在与其他对象相同的堆(不考虑可能的JVM优化)而不是堆栈,与其他对象的形式相同。
数据类的复制和等式检查实现只是生成到类的方法中,并以JVM自然方式作为实例方法调用。
数据类与结构相同的一些限制是由不同的原因引起的:例如,数据类是最终的,因为来自数据类继承的自动生成函数的语义不清楚。
答案 1 :(得分:0)
即使C#中的结构具有构造函数,也始终可以不使用参数来创建它们,而Kotlin中的数据类则需要使用参数化的构造函数。
为确保所生成代码的一致性和有意义的行为,数据类必须满足以下要求:
- 主要构造函数必须至少具有一个参数;
...