Вызов метода 2 класса ниже текущего метода C # - PullRequest
0 голосов
/ 09 ноября 2018

Итак, у меня есть основной класс со списком объектов.

List<Media> media = new List<Media>();

Медиа-класс является абстрактным классом. Существует класс под названием Book, который наследуется от медиа. Ниже приведен пример добавления книги в список СМИ.

media.Add(new Book(mediaInfo[1], Convert.ToInt32(mediaInfo[2]), mediaInfo[3], summary));

mediaInfo - это массив значений, которые передаются в конструктор.

string[] mediaInfo = record.Split('|');

Когда сводка передается на носитель, она шифруется. Класс book содержит метод Decrypt (), который его расшифровывает и работает нормально. Проблема в том, что когда я пытаюсь вызвать его, я получаю сообщение об ошибке, в котором говорится, что Decrypt отсутствует в Media. Так как я это называю. Я пробовал это, но я получаю ошибку.

foreach (Media m in media)
{
   if (m.Search(query))
   {

      if (m.GetType() == typeof(Book))
      {
          Console.WriteLine(m.ToString() + m.Decrypt());
      }
   }
}

Я проверяю, является ли это Книгой, так почему она не может перейти к Книге, чтобы посмотреть, есть ли там Decrypt. Я не могу поместить расшифровку в класс Media, потому что есть также класс песни, который не зашифрован.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Я бы использовал сопоставление с образцом

foreach (Media m in media)
{
   if (m.Search(query))
   {

      if (m is Book b)
      {
          Console.WriteLine(b.ToString() + b.Decrypt());
      }
   }
}
0 голосов
/ 09 ноября 2018

Поскольку m относится к типу Media (который не содержит Decrypt()), вам необходимо привести m к Book:

Console.WriteLine(m.ToString() + ((Book)m).Decrypt());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...