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

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

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

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

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

textual
Листинг программы
using System;
using System.Collections.Generic;
public class Media
{
    public string Type { get; set; }
    public dynamic Attach { get; set; } // dynamic тоже пробовала
}
 
 
class Photo { public int mem; }
class Music { }
class mem
{
    static void Main()
    {
    List<Media> list = new List<Media> { new Media(), new Media() };
        list[0].Attach = new Photo();
        list[1].Attach = new Music();
        list[0].Attach.mem = 5;
        Console.WriteLine(list[0].Attach.mem);//5
    }
}

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


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

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

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