如何实现:Express(ISO 10303-21)TYPE typename = C in C#

时间:2017-07-04 15:33:42

标签: c# express ifc

目前我正在为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; }
    }
    

有没有办法将select结构实现到csharp中,所以_value的属性类型是“IfcDirection”或“IfcVirtualGridIntersection”而不是我现在正在制作的“IfcBase”。那么SELECT结构会被表示吗?

2 个答案:

答案 0 :(得分:1)

您的解决方案是合法的。但我认为你不应该创建这样的类。它破坏了IFC的结构。

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

答案 1 :(得分:0)

我现在通过使用Generic Class实现了它。这不是一个非常优雅的方法,但它的工作原理。唯一的问题是,现在用户可以选择任何类型。因此,您必须依赖用户知道他实际可以选择的内容。对于我现在有效的例子。

public class IfcGridPlacementDirectionSelect< T > : IfcBase 
{ 
   public T _value { get; set; } 
}