property 与 attribute
按照直译,property 与 attribute 都可翻译为 属性 , 严格来说,property 是“个人财产”里的“财产”,是属于主体的另一个东西,是“大主体”的一部分。 attribute 是“属性值”里的“属性”,是对主体的一个测量,纯语义来说是只读的, 实际工程中允许修改的属性都实际是在修改属性背后的某种东西。
以下引用自知乎用户 invalid s 的回答:
property更偏重“拥有实体物质的所有权”这种含义,偏向于“外在属性”,比如谁是百万富翁、谁是豪车车主之类。
而attribute更侧重“个体特质”含义,偏向于“内在属性”,比如谁非常聪明、谁很强壮之类。
打个比方的话,玩游戏,你的角色的强壮是180,这个强壮180就是“attribute”;同时,你的角色拥有一把屠龙刀,是“屠龙刀玩家”,这个“屠龙刀玩家”就是property。
微软的WPF文档里面有这样一句话,说它的xaml支持 “map property to attribute” ;而对应的中文资料直接说成 “把属性映射为属性” ……
典型场景里,property指的是“给画布一支紫色的画笔”这个动作,即必须先
new
一个pen
,设置pen
的color
为紫色,再把这个pen
传给画布。这个过程有明确的所有权转移(在外部new
了一个pen
、然后把这个pen
对象的所有权赋予画布对象)。而通过“map property to attribute”,就可以直接设置画布的
pen color
为紫,就好像设置一个attribute一样,隐藏了所有权转移这个动作。所以,我倾向于把它翻译成 “把‘传递对象’这个动作映射为‘设置属性’” 。