Skip to content

Singleton and companion objects ​

object data declares shared members. Access fields and call methods through the declaration name:

mcfpp
object data Settings {
    var reward: int = 10

    func amount(): int {
        return Settings.reward
    }
}

func main() {
    print(Settings.amount())
}

Object initialization runs once in dependency order. Project objects belong to the program's declarations. Imported library objects participate when needed.

A data template and object data can share a name as companions. The template name accesses shared members. An instance accesses instance fields:

mcfpp
data Reward {
    var amount: int = 5
}

object data Reward {
    var defaultAmount: int = 10
}

func main() {
    var reward = Reward()
    print(reward.amount)
    print(Reward.defaultAmount)
}

Generic templates and companions use matching read-only parameter declarations. Members retain the identity of their declaring owner.