生成された.NETクラスを使用して独自のクラスを拡張します。方法?
質問
私はOWlignerを使用してアセンブリを作成し、ライブラリをプロジェクトにインポートしました。それは大丈夫です。今私は自分のクラスのセットを書きたいです。したがって、私はこれらをアセンブリと同等のものと延長します。しかしそれはうまくいかないだけです。
オントロジーは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を1つだけ宣言します。これはプラグインの実装のバグです。
生成されたクラスを
OWLGrinder
でどのように拡張する必要があるか。 THX私がC#を使ったのは昔のことですので、さびたようなものです。
解決
owlgrinder.exeによって生成された自動生成クラスは、継承のために設計されていません。私はそれが間違っていると言っていません、それはそれのために設計されていません。自動生成クラスには、クラス属性と継承として定義された多数のメタデータが含まれています。インフラストラクチャは、これらの属性が存在すると、非表示になっている場合は、これらのランタイムエラーメッセージが表示されます。
Visual Studioオブジェクトブラウザを使用して、自動生成クラスを介して属性を見てください。 OwlClassAttribute、SubClassOfAttribute、LightVersionAttributeは確かに必須です。 RealWorldObjectクラスの上部にあるManagementObjectのクラス属性を単純にコピー/貼り付けることができます。私は働き、それはうまくいくでしょう。しかし、デフォルトのルーレックスをフォローしていないので、もう一度追加のショーストッパーにぶつかる可能性があります。これはエッジにある少し生きている:)
継承の代わりに、Reflectorまたは他のツールを使用して、自動生成アセンブリをC#にリバースエンジニアリングすることを検討することができます。あなたの手にソースコードを持つことで、生成されたクラスを直接変更することができます。 ManagementObjectクラスを部分的にすることができ、追加のメソッドを別のファイルに実装することができます。