Inheritance ASN.1是否支持某种形式的继承?
例如,假设我定义如下:Inheritance ASN.1是否支持某种形式的继承?,inheritance,asn.1,Inheritance,Asn.1,例如,假设我定义如下: World-Schema DEFINITIONS AUTOMATIC TAGS ::= BEGIN Human ::= SEQUENCE { name UTF8String, first-words UTF8String DEFAULT "Hello World", age INTEGER (1..150) OPTIONAL, height INTEGER (120..200) } END 现在我想定义一个ShortHuman,它完全
World-Schema DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
Human ::= SEQUENCE {
name UTF8String,
first-words UTF8String DEFAULT "Hello World",
age INTEGER (1..150) OPTIONAL,
height INTEGER (120..200)
}
END
现在我想定义一个
ShortHuman
,它完全相同,但是高度限制为150。我能否以某种方式重用已经定义的Human
并细化该描述?我不确定您如何定义继承,但您可以使用Human定义ShortHuman,如下所示:
ShortHuman::=Human(具有组件{height(120..150)})
这将限制您想要的高度
实际上,最好使用以下方法:
ShortHuman::=Human(带组件{…,高度(120..150)})
部分规范对未列出的组件没有任何限制,而完整规范(没有…,)将要求未列出的可选组件(如age)不存在。ASN.1本身不使用术语“继承”。如果您想阅读,X.680中的附录C“类型和值兼容性规则”讨论了ASN.1类型之间的关系
您可以使用参数化来定义Human和ShortHuman,如下所示:
HumanBase { INTEGER : maxHeight } ::= SEQUENCE {
name UTF8String,
first-words UTF8String DEFAULT "Hello World",
age INTEGER (1..150) OPTIONAL,
height INTEGER (120..maxHeight)
}
Human ::= HumanBase { 200 }
ShortHuman ::= HumanBase { 150 }
参数化是ASN.1的一个常用特性,用于“重用”适合某些模式的定义。请注意,您还可以使用类型为的参数,因此,作为一个不太可能的示例,您可以在类型Human和Short Human中为“name”使用不同的字符串类型。X.683包括参数化。谢谢。这正是我想要的。也许在这种情况下,它不是最合适的名字。