28 lines
1.7 KiB
Plaintext
28 lines
1.7 KiB
Plaintext
// 构造器分段示例:原生可选参数/可变子项与源子类新增字段分别验证。
|
|
// 省略 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 {
|
|
rect: TaggedRect
|
|
// 写原对象的 color,挂载显示由依赖跟踪刷新,不需要重新构造整个页面。
|
|
function recolor(self: Actions): Unit { self.rect.color = "#237A45" }
|
|
}
|
|
// 这里刻意省略原生可选项,用末尾字符串初始化子类字段;后面的列表/Column 做对应可变参数演示。
|
|
rect = TaggedRect(180, 60, "省略 radius/color 后的字段")
|
|
event = TaggedEvent("click", "事件字段")
|
|
items = TaggedList(rect, event, "列表成员之后的字段")
|
|
actions = Actions(rect)
|
|
button = Button("调用原对象方法")
|
|
button.onClick(actions.recolor)
|
|
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)
|