Kotlin的数据类== C#的结构?

时间:2017-12-27 15:35:39

标签: c# kotlin

之前我使用过C#,我们可以定义一个struct,它将是一个值类型。我现在正在学习Kotlin,据我所知,kotlin data-class按价值进行比较,可以按值复制等。在网上发现了一些关于此的讨论,但这并不简单,我想要有C#技术娴熟的人Kotlin清除了这一点:我可以将Kotlin的data class解释为C#struct并将其称为一天吗?如果不是,有什么区别?

2 个答案:

答案 0 :(得分:5)

Kotlin数据类和C#结构的主要区别在于Kotlin数据类仍然是,它们通过引用传递(引用类型,以C#表示)并存储在与其他对象相同的堆(不考虑可能的JVM优化)而不是堆栈,与其他对象的形式相同。

数据类的复制和等式检查实现只是生成到类的方法中,并以JVM自然方式作为实例方法调用。

数据类与结构相同的一些限制是由不同的原因引起的:例如,数据类是最终的,因为来自数据类继承的自动生成函数的语义不清楚。

答案 1 :(得分:0)

即使C#中的结构具有构造函数,也始终可以不使用参数来创建它们,而Kotlin中的数据类则需要使用参数化的构造函数。

  

为确保所生成代码的一致性和有意义的行为,数据类必须满足以下要求:

     
      
  • 主要构造函数必须至少具有一个参数;
  •   
     

...

https://kotlinlang.org/docs/reference/data-classes.html