Использование сгенерированных классов .net для расширения собственных классов.Как? - PullRequest
0 голосов
/ 24 февраля 2012

Я использовал OWLGrinder для создания сборки и импортировал библиотеку в свой проект.Это отлично работает.Теперь я хочу написать свой собственный набор классов.Поэтому я расширил их эквивалентом сборки.Но это просто не работает.

Онтология содержит класс с именем ManagementObject.

Я создал другой класс (C #) с именем 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;
        }

, что приводит к ошибке:

ObjectManagement.Object.RealWorldObject объявляет один (итолько один) OwlClassAttribute.Это ошибка реализации плагина.

Как еще мне расширить сгенерированные классы на OWLGrinder.Спасибо, что давно использовал C #, поэтому я немного ржавый.

1 Ответ

0 голосов
/ 28 февраля 2012

Автоматически сгенерированные классы, созданные OwlGrinder.exe, не предназначены для наследования.Я не говорю, что это неправильно, просто оно не предназначено для этого.Автоматически сгенерированные классы содержат множество метаданных, определенных как атрибуты класса, и наследование скрывает все это.Инфраструктура рассчитывает на наличие этих атрибутов, и если они скрыты, вы получаете эти сообщения об ошибках во время выполнения.

Используя Visual Studio Object Browser, посмотрите на атрибуты автоматически сгенерированных классов.OwlClassAttribute, SubClassOfAttribute, LightVersionAttribute, безусловно, являются обязательными.Вы можете просто скопировать / вставить атрибуты класса ManagementObject в верхней части вашего класса RealWorldObject.Я предполагаю, это будет работать.Но опять же, вы можете столкнуться с дополнительными ограничителями шоу, так как вы не следуете маршрутам по умолчанию, для которых был разработан ROWLEX.Это немного на грани:)

Вместо наследования вы можете рассмотреть возможность обратного инжиниринга вашей автоматически сгенерированной сборки в C # с помощью Reflector или других инструментов.Имея исходный код в своей руке, вы можете напрямую изменять сгенерированные классы.Вы можете сделать свой класс ManagementObject частичным и реализовать свои дополнительные методы в отдельном файле.

...