C# 如何在Scala上使用属性?

C# 如何在Scala上使用属性?,c#,scala,encapsulation,C#,Scala,Encapsulation,是的,您可以通过setName设置属性名称,并通过getName获取属性名称。 但是像C#中这样的属性呢: 或 (汽车财产) 我想知道Scala中是否存在这种情况。在没有任何信号的情况下进行谷歌搜索。如果您只需要不可变的字段(推荐!) scala> class A { | var name: String = "" | } defined class A scala> val a = new A a: A = A@1df3082 scala> a.n

是的,您可以通过setName设置属性名称,并通过getName获取属性名称。 但是像C#中这样的属性呢:

(汽车财产)


我想知道Scala中是否存在这种情况。在没有任何信号的情况下进行谷歌搜索。

如果您只需要不可变的字段(推荐!)

scala> class A {
     |   var name: String = ""
     | }
defined class A

scala> val a = new A
a: A = A@1df3082

scala> a.name = "kool"

scala> a.name
res0: String = kool

scala> class A {
     |   private var _name = ""
     |   def name = _name                   // a getter
     |   def name_=(value: String) {        // a setter
     |     _name = value
     |   }
     | }
defined class A

scala> val a = new A
a: A = A@baf4ae

scala> a.name = "abc"

scala> a.name
res1: java.lang.String = abc
是同一件事吗

class A(val name: String)

关于不可变字段/属性。“case”关键字会自动使构造函数参数变为VAL,并添加其他优点。

如果需要java get/set方法,可以使用scala.reflect.BeanProperty

class Person {
   @scala.reflect.BeanProperty
   private var name: String = _
}

val p = new Person
p.setName("Peter")
println(p.getName)
case class A(name: String)
class A(val name: String)
class Person {
   @scala.reflect.BeanProperty
   private var name: String = _
}

val p = new Person
p.setName("Peter")
println(p.getName)