...

Наследование классов, реализация интерфейсов для классов ELMA

Тема в разделе "Разработчикам", создана пользователем mrogov, 6 апр 2018.

  1. mrogov

    mrogov New Member

    Мы разрабатываем собственный модуль для ELMA и встал вопрос:

    Если мы хотим сделать общий интерфейс для классов, которые генерируются плагином, например ICustomDictionary с набором полей Code, Name, Value

    При создании нового класса мы указали реализацию этого интерфейса и генератор делает класс который реализует IEntity, ICustomDictionary.

    А как указать в дизайнере плагина (md файлов), что свойство нового класса (например Code) реализует интерфейс ICustomDictionary?

    Сейчас при компиляции появляются warinings из-за совпадения имен в реализуемом классе и интерфейсе
     
  2. pushkarev

    pushkarev Active Member

    В дизайнере ELMA, реализуемые объектом интерфейсы настраиваются на вкладке "Дополнительные" в поле "Реализуемые интерфейсы". По идее аналогично должно быть и в Visual Studio (нет сейчас под рукой модуля с возможностью проверить). У самих свойств не указывается, что они реализуют свойство того или иного интерфейса, это должно происходить автоматически.
     
  3. mrogov

    mrogov New Member

    Если не указывать, что свойство реализует свойство интерфейса, то при компиляции идут warnings, которые сильно раздражают(((
     
  4. pushkarev

    pushkarev Active Member

    Если при этом все работает корректно, и при обращении в коде проверка реализации интерфейса проходит утвердительно, то возможно, что так и должно быть, т.к. код класса генерируется автоматически, возможно без warnings нельзя было реализовать, ну или разработчики не стали на это заморачиваться :)
    Главное проверьте, реализует ли ваш объект указанный интерфейс непосредственно при работе с ним.
     
  5. mrogov

    mrogov New Member

    Интересно, а вот такой атрибут AutoImplementAttribute не разруливает проблему при наследовании?
     
  6. pushkarev

    pushkarev Active Member

    Честно не знаю, но с точки зрения синтаксиса самого C# и его механизма наследования и реализации интерфейсов, никакого атрибута для обозначения того, что данное свойство имплементирует такое-то свойство реализуемого интерфейса не требуется. Поэтому я не вижу необходимость в каком-либо атрибуте.
     
  7. mrogov

    mrogov New Member

    warning CS0108: "ITForces.ELMA.MobileTickets.Models.IMTBookingStatus.DateCreate" скрывает наследуемый член "ITForces.ELMA.MobileTickets.IMTDictionary.DateCreate". Если скрытие было намеренным, используйте новое ключевое слово.

    Use the new keyword if hiding was intended

    Наследуемый класс не использует new для сокрытия

    "член1" скрывает унаследованный член "член2" Если скрытие было выполнено намеренно, используйте ключевое слово new.

    Была объявлена переменная с тем же именем, что и переменная базового класса. Тем не менее ключевое слово new не использовалось.Это предупреждение свидетельствует о необходимости использовать ключевое слово new. Переменная объявлена так, как это делается при использовании ключевого слова new в объявлении.
     

Поделиться: