Использование сгенерированных классов.net для расширения собственных классов. Как?

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

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

Я создал другой класс (C#) под названием RealWorldObject:

открытый класс RealWorldObject: ManagementObject
    {
        public RealWorldObject(string uri): base(uri) { }
        public RealWorldObject(строка uri, RdfDocument rdfdocument): база (uri, rdfdocument) { }
        public RealWorldObject(RdfDocument rdfdocument): base(rdfdocument) { }

        public String getClassName()
        {
            вернуть this.OwlClassName;
        }
        общедоступная статическая RdfDocument addRealWorldObjectIndividualt(RdfDocument rdfDocument)
        {
            Транспортное средство = новое транспортное средство ("vehicle1", rdfDocument);

            FixedEvent fxE1 = new FixedEvent("autoGekauft", rdfDocument);
            fxE1.agent = new xmlns.com.foaf._01.Person("robert", rdfDocument);

            vehicle.hasFixedEvent = fxE1;

            вернуть rdfDocument;
        }

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

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

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам