【问题标题】:Using the generated .net classes to extend own classes. HowTo?使用生成的 .net 类来扩展自己的类。如何?
【发布时间】:2012-02-24 15:22:33
【问题描述】:

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

本体拥有一个名为 ManagementObject 的类。

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

公共类 RealWorldObject : ManagementObject { 公共 RealWorldObject(string uri) : base(uri) { } 公共 RealWorldObject(string uri, RdfDocument rdfdocument) : base(uri, rdfdocument) { } 公共 RealWorldObject(RdfDocument rdfdocument) : base(rdfdocument) { } 公共字符串 getClassName() { 返回 this.OwlClassName; } 公共静态 RdfDocument addRealWorldObjectIndividualt(RdfDocument rdfDocument) { 车辆车辆 = new Vehicle("vehicle1", rdfDocument); FixedEvent fxE1 = new FixedEvent("autoGekauft", rdfDocument); fxE1.agent = new xmlns.com.foaf._01.Person("robert", rdfDocument); 车辆.hasFixedEvent = fxE1; 返回 rdfDocument; }

导致错误的原因:

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

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

【问题讨论】:

  • 构造函数重写没有用!
  • 我知道,没有它应该可以工作。但如果我这样做: Realworldobject rw = new RealworldObject ("bla");我收到一个错误,没有支持 1 个参数的构造函数!

标签: c# owl rowlex


【解决方案1】:

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

使用 Visual Studio 对象浏览器,查看自动生成的类的属性。 OwlClassAttribute、SubClassOfAttribute、LightVersionAttribute 肯定是必须的。您可以简单地将 ManagementObject 的类属性复制/粘贴到 RealWorldObject 类的顶部。我想,它会起作用的。但同样,您可能会遇到额外的表演障碍,因为您没有遵循 ROWLEX 设计的默认路线。这有点生活在边缘:)

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

【讨论】:

    猜你喜欢
    • 2018-10-07
    • 2012-08-20
    • 2018-02-05
    • 2018-05-12
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 2016-12-18
    • 1970-01-01
    相关资源
    最近更新 更多