.NET 4.x Список абстрактных классов - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Прошу помочь с одной проблемой. Суть проблемы в следующем - есть 2 разных класса (Например, Photo и Music). Реализация этих классов не имеет значения, главное лишь то, что они абсолютно разные. Кроме того, есть 3-й класс Media. Одно поле этого класса должно содержать экземпляр 1-го или 2-го класса. И ко всему прочему мне необходимо создать список экземпляров Media, причем так, чтобы можно было обратиться к полям первых двух классов. Возможно ли такое, в принципе, или нет? Если да, подскажите, пожалуйста, как это сделать. Попробовала сделать так:
Листинг программы
  1. public class Media<T> : IMedia
  2. {
  3. public string Type { get; set; }
  4. public T Attach { get; set; }
  5. }
  6. public interface IMedia
  7. {
  8. string Type { get; set; }
  9. }
  10. List<IMedia> list = new List<IMedia> {new Media<Photo>(), new Media<Music>()};
Работает, но невозможно обратиться к list[0].Attach, т.к. в интерфейсе нет такого поля... А, если вот так:
Листинг программы
  1. public class Media
  2. {
  3. public string Type { get; set; }
  4. public object Attach { get; set; } // dynamic тоже пробовала
  5. }
  6. List<Media> list = new List<Media> {new Media(), new Media()};
  7. list[0].Attach = new Photo();
  8. list[1].Attach = new Music();
тоже компилируется, нужные классы в список добавляются, но обратиться к их полям не получается. Помогите, пожалуйста! Как сделать такой список, чтобы можно было обратиться к полям классов Photo и Music??? Заранее благодарю за помощь!

Решение задачи: «.NET 4.x Список абстрактных классов»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. public class Media
  4. {
  5.     public string Type { get; set; }
  6.     public dynamic Attach { get; set; } // dynamic тоже пробовала
  7. }
  8.  
  9.  
  10. class Photo { public int mem; }
  11. class Music { }
  12. class mem
  13. {
  14.     static void Main()
  15.     {
  16.     List<Media> list = new List<Media> { new Media(), new Media() };
  17.         list[0].Attach = new Photo();
  18.         list[1].Attach = new Music();
  19.         list[0].Attach.mem = 5;
  20.         Console.WriteLine(list[0].Attach.mem);//5
  21.     }
  22. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут