2012-02-24 65 views
0

我使用OWLGrinder来创建程序集并将库导入到我的项目中。这工作正常。现在我想写我自己的一套类。因此,我将这些扩展到了程序集的相当部分。但它不起作用。使用生成的.net类来扩展自己的类。如何?

本体拥有一个名为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 does declare one (and only one) OwlClassAttribute. This is an implementation bug of the plugin.

怎么回事应该由我OWLGrinder扩展生成的类。我很久以前用C#,所以我有点生疏。

+0

构造函数覆盖没有任何用处! – Bas 2012-02-24 19:57:54

+0

我知道,它应该没有工作。但如果我这样做: Realworldobject rw = new RealworldObject(“bla”); 我得到一个错误,没有支持1参数的构造函数! – robert 2012-02-26 10:35:41

回答

0

由OwlGrinder.exe生成的自动生成的类不是为了继承而设计的。我并不是说这是错误的,它并不是为此而设计的。自动生成的类包含许多定义为类属性的元数据,并且继承隐藏了所有这些。基础架构会考虑这些属性的存在,如果它们隐藏,则会得到这些运行时错误消息。

使用Visual Studio对象浏览器,查看自动生成的类上的属性。 OwlClassAttribute,SubClassOfAttribute,LightVersionAttribute当然是强制性的。您可以简单地将ManagementObject的类属性复制/粘贴到RealWorldObject类的顶部。我认为,它会起作用。但是,您可能会遇到更多的显示屏塞,因为您不遵循ROWLEX设计的默认路线。这是有点生活在边缘:)

而不是继承,你可能会考虑使用反射器或其他工具逆向工程自动生成的程序集到C#。把源代码放在手中,你可以直接修改生成的类。您可以将ManagementObject类设为部分,并在另外的文件中实现其他方法。

+0

谢谢。这给了我一个明确的立场。 – robert 2012-02-29 10:49:57

相关问题