powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / This Generic
9 сообщений из 9, страница 1 из 1
This Generic
    #39786814
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет у меня есть следующая структура моделей.

Модели:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
  public  class BaseModel
    {

        /// <summary>
        /// Храним ссылку на коллекцию, в которой элемент находится
        /// </summary>

        private BaseSet<BaseModel> _baseSet;

        public BaseSet<BaseModel> baseSet
        {
            get { return _baseSet; }
            set { _baseSet = value; }
        }
    }


    public class Derived:BaseModel
    {        

    }



Класс, хранящий коллекцию моделей

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
 /// <summary>
    /// Содержит элементы BaseModel в списке
    /// </summary>
    public class BaseSet<T>
    where T:BaseModel
    {
        /// <summary>
        /// Список для хранения
        /// </summary>
        public List<T> ListOfBaseModels { get; set; }

        public void AddItems(IReadOnlyList<T> Items) 
        {
            foreach (T item in Items)
            {
             /// присваиваем ссылку на  коллекцию для элемента
                item.baseSet = this; //Не удается неявно преобразовать тип Generic.BaseSet<T> в  Generic.BaseSet<Generic.BaseModel> 
            }
        }
    }


    public class DerivedSet: 
        BaseSet<Derived>
    {
    }




Мне необходимо получить следующую функциональность (см рис)

Почему идет ошибка преобразования типов, ведь я указал, что T:BaseModel? Спасибо
...
Рейтинг: 0 / 0
This Generic
    #39786817
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
читайте, что такое
* инвариантность
* ковариантность
* контрвариантность
у обобщенных интерфейсов

Нельзя привести класс MyGeneric<string> к MyGeneric<object>, так как это 2 разных класса, которые не унаследованы друг от друга и для которых не определены оператора приведения типа друг к другу, хотя string и наследует object;
...
Рейтинг: 0 / 0
This Generic
    #39786833
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub,
Зачем это всё?
На одну ИС создается одна Модель
...
Рейтинг: 0 / 0
This Generic
    #39786839
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
что такое "ИС"?
...
Рейтинг: 0 / 0
This Generic
    #39786849
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub,

ГОСТ 34.321-96
ИНФОРМАЦИОННАЯ СИСТЕМА
...
Рейтинг: 0 / 0
This Generic
    #39786858
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
у Вас на всё приложение используется одна модель?
...
Рейтинг: 0 / 0
This Generic
    #39786863
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subPetro123,
у Вас на всё приложение используется одна модель?одна БОЛЬШАЯ))
А ИС НЕСКОЛЬКО.
И каждая ИС делалась в несколько очередей. По ЧТЗ.
...
Рейтинг: 0 / 0
This Generic
    #39786940
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesчитайте, что такое
* инвариантность
* ковариантность
* контрвариантность
у обобщенных интерфейсов

Нельзя привести класс MyGeneric<string> к MyGeneric<object>, так как это 2 разных класса, которые не унаследованы друг от друга и для которых не определены оператора приведения типа друг к другу, хотя string и наследует object;
Короче говоря, ко/контрвариантность (приведение типа аргументов генерик-типа согласно иерархии наследования) работает только в интерфейсах и делегатах. С конкретными реализациями - нет.
...
Рейтинг: 0 / 0
This Generic
    #39787032
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныRoman Mejtesчитайте, что такое
* инвариантность
* ковариантность
* контрвариантность
у обобщенных интерфейсов

Нельзя привести класс MyGeneric<string> к MyGeneric<object>, так как это 2 разных класса, которые не унаследованы друг от друга и для которых не определены оператора приведения типа друг к другу, хотя string и наследует object;
Короче говоря, ко/контрвариантность (приведение типа аргументов генерик-типа согласно иерархии наследования) работает только в интерфейсах и делегатах. С конкретными реализациями - нет.
массивы ссылочных типов поддерживают ковариантность.
можно спокойно привести тип MyClass[] к типу object[] или другому базовому. Фокус тут в том, что каждый элемент массива имеет длину 4\8 байт, которая является ссылкой на реальный объект.
Естественно, так же фокус с структурой не прокатит, так как их размер не фиксированный, они не поддерживают наследование и потребуется упаковка.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / This Generic
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]