我使用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#,所以我生锈了。
答案 0 :(得分:0)
OwlGrinder.exe生成的自动生成的类并不是为继承而设计的。我并不是说它是错的,它不是为此设计的。自动生成的类包含大量定义为类属性的元数据,继承隐藏了所有这些。基础结构依赖于这些属性的存在,如果它们被隐藏,您将获得这些运行时错误消息。
使用Visual Studio对象浏览器,查看自动生成的类的属性。 OwlClassAttribute,SubClassOfAttribute,LightVersionAttribute当然是强制性的。您可以简单地在RealWorldObject类的顶部复制/粘贴ManagementObject的类属性。我想,它会奏效。但同样,你可能会遇到额外的show stoppers,因为你没有遵循ROWLEX设计的默认路由。这有点生活在边缘:)
您可以考虑使用Reflector或其他工具将自动生成的程序集逆向工程为C#,而不是继承。掌握源代码后,您可以直接修改生成的类。您可以使ManagementObject类成为局部,并在单独的文件中实现其他方法。