Хорошо, вот в чем проблема. У меня есть интерфейс IBook, который включает свойство Name. Есть два класса, которые наследуются от IBook и добавляют собственное свойство Genre. Я хочу создать словарь или список и добавить туда всевозможные книги и получить к ним доступ по строке и их свойствам, поэтому я сделал его словарём. В этом примере я могу получить доступ к книгам ["LOTR"]. Имя, но не к книгам ["LOTR"]. Жанр, вероятно потому, что имя является свойством интерфейса IBook, а жанр является свойством класса, наследуемого от IBook.
Можно ли заставить словарь или список работать с типом интерфейса и по-прежнему иметь доступ ко всем свойствам наследующего класса, или мне следует использовать массив или что-то в этом роде?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp124
{
interface IBook
{
string Name { get; set; }
}
public class FantasyBook:IBook
{
string name;
string genre;
public string Name
{
get { return name; }
set { name = value; }
}
public string Genre
{
get { return genre; }
set { genre = value; }
}
}
public class HorrorBook : IBook
{
string name;
string genre;
public string Name
{
get { return name; }
set { name = value; }
}
public string Genre
{
get { return genre; }
set { genre = value; }
}
}
class Program
{
static void Main(string[] args)
{
FantasyBook LordOfTheRings = new FantasyBook();
HorrorBook Frankenstein = new HorrorBook();
Dictionary<string, IBook> books = new Dictionary<string,
IBook>();
books.Add("LOTR", LordOfTheRings);
books.Add("Frankenstein", Frankenstein);
books["LOTR"].Name = "Lord Of The Rings";
books["LOTR"].Genre = "Fantasy";
Console.ReadLine();
}
}
}