// 构造器分段示例:原生可选参数/可变子项与源子类新增字段分别验证。 // 省略 RectBlock 的 radius/color 不应使字符串 tag 被错当成原生颜色参数。 // 在原生矩形后增加 tag 字段;位置构造仍保留 width/height 及可选圆角/颜色规则。 class TaggedRect: RectBlock { tag: String } // 在可变数量 Block 子项之后接收源 tag,子项列表与字段不混用。 class TaggedColumn: Column { tag: String } // 保留原生事件 kind,再追加业务字符串字段。 class TaggedEvent: Event { tag: String } // 原生列表成员之后追加 tag,列表元素仍可保存不同托管类型。 class TaggedList: ObjectList { tag: String } // 将需要更新的矩形作为强业务引用保存,按钮回调只修改它的颜色。 class Actions { // 字段保存 TaggedRect 的对象引用,recolor 的写入会被当前页面中该对象的绘制读取观察到。 rect: TaggedRect // 写原对象的 color,挂载显示由依赖跟踪刷新,不需要重新构造整个页面。 // 由下面 Button.onClick 注册为零参绑定方法;不接收 Event,也不修改 tag。 function recolor(self: Actions): Unit { self.rect.color = "#237A45" } } // 这里刻意省略原生可选项,用末尾字符串初始化子类字段;后面的列表/Column 做对应可变参数演示。 rect = TaggedRect(180, 60, "省略 radius/color 后的字段") // kind 是原生 Event 参数,第二个字符串才是 TaggedEvent 的源字段 tag。 event = TaggedEvent("click", "事件字段") // 前两个托管对象归入原生 ObjectList 成员,末尾字符串留给子类字段,不作为第三个列表成员。 items = TaggedList(rect, event, "列表成员之后的字段") actions = Actions(rect) button = Button("调用原对象方法") // 这里只注册回调,不立即执行 recolor,因此首次显示仍使用矩形原生构造的默认颜色。 button.onClick(actions.recolor) // Column 原生参数接收 padding/gap 和视觉孩子;末尾 tag 字符串不参与布局,textOf 则读取各对象的 tag。 root = TaggedColumn(24, 16, TextBlock("原生选项与子类字段分别检查", 2), rect, ui.textOf(rect, "tag"), ui.textOf(event, "tag"), ui.textOf(items, "tag"), button, "可变子项之后的字段") page = Page() page.title = "构造器契约" page.render(root)