目前,我正在为 IFC 编写一个非常基本的早期绑定,它是按照 ISO 10303-21 中描述的快速标准映射的。 由于我两个月前才开始编码,所以我所做的一切都相当基本。但是,我已经可以在给定架构中创建所有实体和类型及其所有属性。我还能够按照 ISO 将其映射到文件。 我仍然遇到一个问题:
-
在架构中,存在 SELECT 类型的类型,如下所示:
TYPE IfcGridPlacementDirectionSelect = SELECT (IfcDirection ,IfcVirtualGridIntersection); END_TYPE;
IfcDirection 和 IfcVirtualGridIntersection 本身都是实体或类型(我为类型和实体创建了一个类)。 我的 TYPE IfcGridPlacementDirectionSelect - class 看起来像这样:
public class IfcGridPlacementDirectionSelect :IfcBase { public IfcBase _value { get; set; } }
有没有办法将选择结构实现到 csharp 中,因此_value的属性类型是"IfcDirection"或"IfcVirtualGridIntersection",而不是我现在制作的"IfcBase"。这样选择结构就会被代表出来?
您的解决方案是合法的。但我认为你不应该创建这样的类。它打破了国际金融公司的结构。
在我的实现中,每当使用IfcGridPlacementDirectionSelect
时,我都会创建 2 个函数:一个用于IfcDirection
,另一个用于IfcVirtualGridIntersection
。
我现在通过使用泛型类实现了它。这不是一个非常优雅的方法,但它有效。唯一的问题是,现在用户可以选择任何类型。因此,您必须依靠用户知道他实际上可以选择的内容。对于我的例子,现在有效。
public class IfcGridPlacementDirectionSelect< T > : IfcBase
{
public T _value { get; set; }
}