Нужен ли конструктор с наследованием? - PullRequest
3 голосов
/ 14 февраля 2012

У меня есть следующее для классов ( POCO's? ), где второй должен расширять первый.

Я предполагаю, что мне нужно свойство, ссылающееся на базовый экземпляр, в данном случае Business, но нужен ли мне конструктор для "заполнения" этого свойства, поскольку страховая компания не может существовать без Business?

Моя ссылка на это - базовая БД, где tblInsuranceCompany имеет ограничение FK для столбца BusinessID обратно на tblBusiness.

Кроме того, я очень новичок в ООП, поэтому, пожалуйста, укажите на что-нибудь еще, что вы можете увидеть как "неправильное". Спасибо,

public class Business
{
    public int BusinessID { get; set; }

    public BusinessType BusinessType { get; set; }

    public string Name { get; set; }

    public string ContactName { get; set; }

    public string EmailAddress { get; set; }

    public DateTime? InactiveDate { get; set; }

    public IList<Address> Addresses { get; set; }

    public IList<Phone> Phones { get; set; }

    public string DisplayString { get { return this.ToString(); } }

    public override string ToString()
    {
        return String.Format("{0}: {1}", Name, BusinessType.TypeDescription);
    }
}

public class InsuranceCompany : Business
{
    public int InsuranceCompanyID { get; set; }

    public Business Business { get; set; }

    public InsuranceCompanyType InsuranceCompanyType { get; set; }

    public string DRIInsuranceCompanyNumber { get; set; }

    public string DisplayString { get { return this.ToString(); } }

    public override string ToString()
    {
        return String.Format("{0}: {1}", Business.Name, InsuranceCompanyType.TypeDescription);
    }
}

Ответы [ 3 ]

5 голосов
/ 14 февраля 2012

Я предполагаю, что мне нужно свойство, ссылающееся на базовый экземпляр, в данном случае Business,

Нет, вам это не нужно.Страховая компания является бизнесом.Он также будет иметь все свойства Business, поскольку он наследуется от Business.Вам не нужно свойство для ссылки на это, так как ссылка на объект InsuranceCompany будет такой же ссылкой, что и ссылка на часть "business" (это один и тот же объект).

но нужен ли мне конструктор, чтобы "заполнить" это свойство, поскольку страховая компания не может существовать без бизнеса?

Все классы получают конструктор. Когда вы создаете страховую компанию, она будеттакже эффективно создавать «бизнес».

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

1 голос
/ 14 февраля 2012

Я не совсем уверен, если вы путаете наследование с композицией здесь.

Если страховая компания является видом бизнеса, то наследование будет возможным решением. В этом случае вам не нужно свойство Business, сам объект является бизнесом и обладает всеми его свойствами. InsuranceCompany и Business - это не два разных случая, а один.

0 голосов
/ 14 февраля 2012

Вы можете просто использовать свойство Name (или base.Name) в InsuranceCompany и удалить свойство Business из производного класса.

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