使用生成的.net类来扩展自己的类。如何?

时间:2012-02-24 15:22:34

标签: c# owl rowlex

我使用OWLGrinder创建程序集并将库导入到我的项目中。这很好。现在我想编写自己的一组类。因此,我用相当于装配的方式扩展了它们。但它只是不起作用。

本体包含一个名为ManagementObject的类。

我创建了另一个名为RealWorldObject的类(C#):

public class RealWorldObject : ManagementObject
    {
        public RealWorldObject(string uri) : base(uri) { }
        public RealWorldObject(string uri, RdfDocument rdfdocument) : base(uri, rdfdocument) { }
        public RealWorldObject(RdfDocument rdfdocument) : base(rdfdocument) { }

        public String getClassName()
        {
            return this.OwlClassName;
        }
        public static RdfDocument addRealWorldObjectIndividualt(RdfDocument rdfDocument)
        {
            Vehicle vehicle = new Vehicle("vehicle1", rdfDocument);

            FixedEvent fxE1 = new FixedEvent("autoGekauft", rdfDocument);
            fxE1.agent = new xmlns.com.foaf._01.Person("robert", rdfDocument);

            vehicle.hasFixedEvent = fxE1;

            return rdfDocument;
        }

导致错误:

  

ObjectManagement.Object.RealWorldObject确实声明了一个(并且只有一个)OwlClassAttribute。这是插件的实现错误。

我应该如何通过OWLGrinder扩展生成的类。 很久以前,我使用过C#,所以我生锈了。

1 个答案:

答案 0 :(得分:0)

OwlGrinder.exe生成的自动生成的类并不是为继承而设计的。我并不是说它是错的,它不是为此设计的。自动生成的类包含大量定义为类属性的元数据,继承隐藏了所有这些。基础结构依赖于这些属性的存在,如果它们被隐藏,您将获得这些运行时错误消息。

使用Visual Studio对象浏览器,查看自动生成的类的属性。 OwlClassAttribute,SubClassOfAttribute,LightVersionAttribute当然是强制性的。您可以简单地在RealWorldObject类的顶部复制/粘贴ManagementObject的类属性。我想,它会奏效。但同样,你可能会遇到额外的show stoppers,因为你没有遵循ROWLEX设计的默认路由。这有点生活在边缘:)

您可以考虑使用Reflector或其他工具将自动生成的程序集逆向工程为C#,而不是继承。掌握源代码后,您可以直接修改生成的类。您可以使ManagementObject类成为局部,并在单独的文件中实现其他方法。