0

目前,我正在为 IFC 编写一个非常基本的早期绑定,它按照 ISO 10303-21 中描述的 Express 标准进行映射。由于我两个月前才刚刚开始编码,所以我所做的一切仍然相当基本。但是,我已经可以在给定的模式中创建具有所有属性的所有实体和类型。我还可以按照 ISO 将其映射到文件。我仍然遇到一个问题:

  • 在模式中,有些类型是 SELECT 类型,如下所示:

    TYPE IfcGridPlacementDirectionSelect = SELECT
    (IfcDirection
    ,IfcVirtualGridIntersection);
    END_TYPE; 
    

    IfcDirection 和 IfcVirtualGridIntersection 本身都是实体或类型(我为类型和实体创建了一个类)。我的 TYPE IfcGridPlacementDirectionSelect - 类看起来像这样:

    public class IfcGridPlacementDirectionSelect :IfcBase
    {
       public IfcBase _value { get; set; }
    }
    

有没有办法将选择结构实现到 csharp 中,所以 _value 的属性类型是“IfcDirection”或“IfcVirtualGridIntersection”,而不是我现在所做的“IfcBase”。以便表示 SELECT 结构?

4

2 回答 2

1

您的解决方案是合法的。但我认为你不应该创建这样的类。它打破了国际金融公司的结构。

在我的实现中,每当使用 时IfcGridPlacementDirectionSelect,我都会创建 2 个函数:一个 for IfcDirection,另一个 for IfcVirtualGridIntersection

于 2017-07-13T08:42:32.717 回答
0

我现在使用通用类实现了它。这不是一个非常优雅的方法,但它有效。唯一的问题是,现在用户可以选择任何类型。因此,您必须依靠用户知道他实际上可以选择什么。对于我现在有效的示例。

public class IfcGridPlacementDirectionSelect< T > : IfcBase 
{ 
   public T _value { get; set; } 
}
于 2017-07-07T06:00:40.590 回答