我需要创建一个基于 EXPRESS 模式的类库。EXPRESS 模式具有如下所示的类型和实体:
ENTITY IfcRoot
ABSTRACT SUPERTYPE OF (ONEOF
(IfcObjectDefinition
,IfcPropertyDefinition
,IfcRelationship));
GlobalId : IfcGloballyUniqueId;
OwnerHistory : OPTIONAL IfcOwnerHistory;
Name : OPTIONAL IfcLabel;
Description : OPTIONAL IfcText;
UNIQUE
UR1 : GlobalId;
END_ENTITY;
在这里,GlobalId、OwnerHistory、Name 和 Description 都是 IfcRoot 类的属性。例如,“Name”的属性类型是 IfcLabel,它在 EXPRESS 模式中作为 TYPE 给出,如下所示:
TYPE IfcLabel = STRING(255);
END_TYPE;
这种类型是字符串类型或井字符串数组。在我的方法中,我将模式中的所有实体和模式中的所有类型都实现为 chsharp 中的类。因此我写了一个字符串阅读器,它读取模式并基于它创建实体(~800)和类型(~400)。我的实现中的 IfcLabel 如下所示:
public class IfcLabel
{
public string _value { get; set; }
}
这一切都很好,但是当我想使用我的类库时,由于每个属性类型本身就是一个类,所以真的很费力。这意味着我必须首先创建 IfcLabel 类的对象并分配 _value 属性,然后创建我的 IfcRoot 对象并将 Name 属性分配为 IfcLabel 对象。有谁知道,我如何以更智能的方式实现它?还有一件事要补充:所有类型都需要有一个方法并从一个名为 IfcBase 的类继承,所以这仍然需要成为可能。我也不允许直接将属性类型从 IfcLabel 更改为字符串,无论如何它实际上是最终的。