Аватар для Konstantin1706
27 / 27 / 3
Регистрация: 17.07.2008
Сообщений: 224

Фабрика классов: ковариантные возвращаемые типы не поддерживаются в управляемых типах

10.07.2015, 09:50. Показов 1225. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Имеются 2 интерфейса:
1. IEmployeeAbstractFactory - представляет фабрику;
2. IEmployee - интерфейс сотрудника.
Пытаюсь из фабрики получить некоторый объект, который имплементирует IEmployee.
Класс EmployeeFactory имплементирует IEmployeeAbstractFactory.
Класс Employee имплементирует IEmployee.

C++
1
2
3
public interface class IEmployeeAbstractFactory{
    IEmployee^ getEmployee(String^, String^, String^);
};
C++
1
2
3
4
5
public interface class IEmployee{
    void setFirstName(String^);
    void setSecondName(String^);
    void setPatronicName(String^);
};
C++
1
2
3
4
5
6
7
ref class Employee : public IEmployee
{
private:
    String^ firstName;
    String^ secondName;
    String^ patronicName;
};
C++
1
2
3
4
5
6
ref class EmployeeFactory : IEmployeeAbstractFactory
{
public:
    EmployeeFactory(void);
    Employee^ getEmployee(String^, String^, String^);//C2392
};
При компиляции выводит ошибку, которая гласит о том, что:
C++
1
error C2392: Employee ^EmployeeFactory::getEmployee(System::String ^,System::String ^,System::String ^): ковариантные возвращаемые типы не поддерживаются в управляемых типах, в противном случае "IEmployee ^IEmployeeAbstractFactory::getEmployee(System::String ^,System::String ^,System::String ^)" был бы переопределен.
В интернете ни чего путного не нашел.
Как можно обойти данную ошибку? Заранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.07.2015, 09:50
Ответы с готовыми решениями:

Что бы было возможно если ковариантные типы-параметры могли бы быть ограничениями?
Что бы было возможно если ковариантные типы-параметры могли бы быть ограничениями в where? Я имею ввиду под возможно - неправильный код,...

VS: В этой конфигурации не поддерживаются 128-битные типы с плавающей запятой
Добрый день, уважаемые коллеги. Прошу подсказать как исправить ошибку. 1. Создал в VS проект консольного приложения C++ под Linux...

Фабрика XDTO и типы в ней
Доброго времени суток! Не могу понять в каком модуле писать код? http://v8.1c.ru/overview/Term_000000274.htm Что значит типы?

5
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
10.07.2015, 11:28
C++
1
2
3
4
5
6
7
ref class EmployeeFactory : IEmployeeAbstractFactory
{
public:
    EmployeeFactory(void);
    // метод из IEmployeeAbstractFactory возвращает IEmployee^
    IEmployee^ getEmployee(String^, String^, String^); 
};
Иначе, если я правильно понял, IEmployeeAbstractFactory должен быть ковариантным.
Не знаю, как обстоят дела в C++/CLI с ко-/контравариантностью, но судя по сообщению
ковариантные возвращаемые типы не поддерживаются в управляемых типах
обстоят плохо.
1
 Аватар для Konstantin1706
27 / 27 / 3
Регистрация: 17.07.2008
Сообщений: 224
13.07.2015, 07:49  [ТС]
Есть ли способ сделать по-другому?
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
13.07.2015, 10:47
Konstantin1706, возвращать IEmployee^, как я привёл в коде выше.
Затем, для использования приводить к типу Employee^.
C++/CLI не поддерживает ко(нтра)вариантность возвращаемых/принимаемых объектов, так что придётся городить велосипеды.
Если уж очень нужно это свойство, то можно создать чистый, неуправляемый класс C++, он, насколько мне известно, поддерживает ко(нтра)вариантность, но пример не смогу написать, с плюсами знаком поверхностно, это к спецам.
1
 Аватар для Konstantin1706
27 / 27 / 3
Регистрация: 17.07.2008
Сообщений: 224
13.07.2015, 13:36  [ТС]
tezaurismosis, вся была проблема в моей невнимательности и усталости к концу недели. IEmployee^ я пытался возвратить, получив очередную ошибку. Я не указал, что метод getEmployee будет виртуальным. Указав, что метод виртуальный и возвращает интерфейс, компилируется без ошибок. Спасибо, тебе, больше, tezaurismosis , и желаю огромного терпения =).
0
13.07.2015, 15:13

Не по теме:

Konstantin1706, и тебе спасибо за хорошие слова. Ты уже второй раз сам разбираешься с проблемой - моё участие минимально. Правильно говорят - хочешь решить проблему, объясни её другому. :)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.07.2015, 15:13
Помогаю со студенческими работами здесь

Фабрика классов
Всем привет. Изучая COM, набрел на фабрику классов. Я так понял, что фабрика классов, это компонент, который реализует другой компонент....

Фабрика обьектов и названия классов
Вопрос следующий: как можно получить название класса в виде строки, ну или как вариант превратить параметр шаблона(которым и будет этот...

Ошибка "смешанные типы не поддерживаются" при объявлении массива
нужно создать массив вот код: #pragma endregion char mas;//1=+ 2=- 3=* 4=/ 5=( 6=) 7=sin 8=cos 9=tg 10=ctg 0=число но выдаёт ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru