生成された.NETクラスを使用して独自のクラスを拡張します。方法?

StackOverflow https://stackoverflow.com/questions/9433210

  •  12-11-2019
  •  | 
  •  

質問

私は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クラスを部分的にすることができ、追加のメソッドを別のファイルに実装することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top