Verwendung der generierten .net-Klassen zur Erweiterung eigener Klassen.Wie man?

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

  •  12-11-2019
  •  | 
  •  

Frage

Ich habe den OWLGrinder zum Erstellen der Baugruppe verwendet und die Bibliothek in mein Projekt importiert.Das funktioniert gut.Jetzt möchte ich meine eigenen Klassen schreiben.Deshalb habe ich diese um das Äquivalent der Baugruppe erweitert.Aber es funktioniert einfach nicht.

Die Ontologie enthält eine Klasse namens ManagementObject.

Ich habe eine weitere Klasse (C#) namens RealWorldObject erstellt:

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;
        }

Was zu dem Fehler führt:

ObjectManagement.Object.RealWorldObject deklariert ein (und nur ein) OwlClassAttribute.Dies ist ein Implementierungsfehler des Plugins.

Wie sonst soll ich die generierten Klassen um die erweitern OWLGrinder.Danke, es ist lange her, dass ich C# verwendet habe, also bin ich etwas eingerostet.

War es hilfreich?

Lösung

Die von OwlGrinder.exe automatisch generierten Klassen sind nicht für die Vererbung konzipiert.Ich sage nicht, dass es falsch ist, es ist einfach nicht dafür konzipiert.Die automatisch generierten Klassen enthalten zahlreiche Metadaten, die als Klassenattribute definiert sind, und durch die Vererbung wird all das ausgeblendet.Die Infrastruktur rechnet mit dem Vorhandensein dieser Attribute und wenn sie ausgeblendet sind, erhalten Sie diese Laufzeitfehlermeldungen.

Sehen Sie sich mithilfe des Visual Studio-Objektbrowsers die Attribute der automatisch generierten Klassen an.OwlClassAttribute, SubClassOfAttribute, LightVersionAttribute sind auf jeden Fall obligatorisch.Sie können die Klassenattribute von ManagementObject einfach oben in Ihre RealWorldObject-Klasse kopieren/einfügen.Ich gehe davon aus, dass es funktionieren wird.Aber auch hier könnten Sie auf weitere Überraschungen stoßen, da Sie nicht den Standardrouten folgen, für die ROWLEX entwickelt wurde.Das ist ein bisschen Leben am Rande :)

Anstelle der Vererbung können Sie auch ein Reverse Engineering Ihrer automatisch generierten Assembly in C# mit Reflector oder anderen Tools in Betracht ziehen.Wenn Sie den Quellcode zur Hand haben, können Sie die generierten Klassen direkt ändern.Sie können Ihre ManagementObject-Klasse partiell gestalten und Ihre zusätzlichen Methoden in einer separaten Datei implementieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top