Наследование базового класса и изменение имени свойства - PullRequest
1 голос
/ 06 мая 2020

Рассмотрим структуру таблицы Book:

BookId, IsEbook, ISBN, PubDate, EbookFormat

Книга может быть бумажной или электронной на основе значения столбца IsEbook.

Результат метода будет иметь две коллекции: одна для книг, а другая для электронных книг.

  • Книга
    • BookId
    • ISBN
    • PubDate
  • EBook
    • EBookId
    • ISBN
    • PubDate
    • EbookFormat

BookId и EBookId - это разные свойства, значения которых берутся из столбца BookId.

Могу ли я создать два класса, один для книги, а другой для электронной книги, или я могу каким-то образом использовать наследование, потому что BookId и EBookId совпадают в таблице с другим именем в выводе.

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 06 мая 2020

Только общие / разделяемые объекты должны быть вместе в базовом классе.

Если свойство имеет другое имя, то оно не является общим, поэтому не должно быть в общем базовом классе, даже если оно очень и очень похоже. Таким образом, в этом случае у вас есть только общие ISBN и PubDate.

Вы можете сделать свой базовый класс абстрактным, чтобы он не мог быть создан самим.

Но вы также можете использовать другой подход и указать общность в интерфейсе, и пусть классы вашей книги и электронных книг используют его вместо базового класса. Как это:

    public interface IBook
    {
        DateTime PubDate { get; set; }
        string ISDN { get; set; }
    }

    public class Book: IBook
    {
        public DateTime PubDate { get ; set ; }   //Comes from IBook
        public string ISDN { get ; set ; }  //Comes from IBook

        public int BookId { get; set; }
    }

    public class EBook : IBook
    {
        public DateTime PubDate { get; set; }   //Comes from IBook
        public string ISDN { get; set; }  //Comes from IBook

        public int EBookId { get; set; }
        public string EbookFormat { get; set; }
    }
0 голосов
/ 06 мая 2020

Я бы создал два класса, Book и EBook, но вы могли бы указать BookId, ISBN и PubDate в интерфейсе, например IBook. Таким образом, вы можете написать logi c, который применяется к обоим, без одинаковых имен свойств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...