Utilisation des classes .NET générées pour étendre ses propres classes. Comment?

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

  •  12-11-2019
  •  | 
  •  

Question

J'ai utilisé le OwlGrinder pour créer l'assemblage et importé la bibliothèque dans mon projet. Cela fonctionne bien. Maintenant, je veux écrire mon propre ensemble de cours. Par conséquent, je les ai étendus avec l'équivalent de l'assemblage. Mais cela ne fonctionne tout simplement pas.

L'ontologie détient une classe nommée ManagementObject.

J'ai créé une autre classe (C #) appelée RealWorldObject:

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

Ce qui mène à l'erreur:

ObjectManagement.Object.RealWorldObject en déclare un (et un seul) OwlClassAttribute. Il s'agit d'un bogue d'implémentation du plugin.

Comment puis-je étendre les classes générées par le OWLGrinder. Merci il y a longtemps que j'ai utilisé C #, donc je suis un peu rouillé.

Était-ce utile?

La solution

Les classes générées automatiquement produites par OwlGrinder.exe n'ont pas été conçues pour avoir l'héritage à l'esprit. Je ne dis pas que c'est faux, il n'est tout simplement pas conçu pour cela. Les classes générées automatiquement contiennent de nombreuses métadonnées définies comme des attributs de classe et l'héritage cache tout cela. L'infrastructure compte sur la présence de ces attributs et s'ils sont cachés, vous obtenez ces messages d'erreur d'exécution.

À l'aide du navigateur d'objets Visual Studio, jetez un œil aux attributs sur les classes générées par automatiquement. OwlClassAttribute, sous-classofattribute, LightVersionAttribute est certainement obligatoire. Vous pouvez simplement copier / coller les attributs de classe de ManagementObject en haut de votre classe RealWorldObject. Je suppose que cela fonctionnera. Mais encore une fois, vous pourriez tomber sur des bouchons de spectacles supplémentaires, car vous ne suivez pas les routes par défaut que Rowlex a été conçue. C'est un peu vivant sur le bord :)

Au lieu d'un héritage, vous pourriez envisager de rétro-ingénierie de votre assemblage généré automatiquement en C # à l'aide d'un réflecteur ou d'autres outils. Ayant le code source dans votre main, vous pouvez modifier directement les classes générées. Vous pouvez rendre votre classe ManagementObject Partial et implémenter vos méthodes supplémentaires dans un fichier distinct.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top