Наследование класса C # - PullRequest
       12

Наследование класса C #

7 голосов
/ 05 октября 2010

Я работаю со страховкой и имею два разных типа полиса - автомобильный и бытовой, представленный двумя разными классами, автомобильный и бытовой.

Оба имеют несколько общих бит данных, поэтому оба наследуют от другого класса, называемого Policy.Когда пользователь входит в приложение, у него может быть политика в отношении двигателя или домашнего хозяйства, поэтому приложение должно отображать общую информацию и информацию, уникальную для Motor или Household.Чтобы инкапсулировать все это, у меня есть объект ответа, в котором есть и член Motor, и член домохозяйства, как показано ниже:

public class Response
{
    ...
    private MotorPolicy                 _motorPolicy;
    private HouseholdPolicy             _householdPolicy;
    ....
}

Код ниже должен демонстрировать:

if (response.PolicyType == Enumerations.PolicyType.Motor) 
{
    lblDescription.Text = response.MotorPolicy.Description;
    lblReg.Text = response.MotorPolicy.Reg;
}
else
{
    lblDescription.Text = response.HouseholdPolicy.Description;
    lblContents.Text = response.HouseholdPolicy.Contents;
}

У MotorPolicy нет свойства Contents, а у HouseholdPolicy нет свойства Reg.

Но я действительно хочу просто сделать:

if (response.PolicyType == Enumerations.PolicyType.Motor) 
{
    lblDescription.Text = response.Policy.Description;
    ...
}

Я пробовал использовать дженерики, не могнайти правильное решение.

Ответы [ 13 ]

0 голосов
/ 05 октября 2010

Может ли ваш ответ содержать либо MotorPolicy, либо HouseholdPolicy, либо он может содержать один из них?

Если вы имеете дело с одним или другим, то создайте базовый тип, который наследуют оба класса, который определяет общие свойства. Когда вы выводите общие свойства, просто приведите Policy в качестве базового типа и используйте его.

0 голосов
/ 05 октября 2010

Самым простым решением было бы реализовать интерфейс со свойством description и свойством «содержимого», а затем в классе политики двигателя создать фиктивное свойство «содержимого», которое возвращает «reg».

0 голосов
/ 05 октября 2010

определить интерфейс Policy и реализовать его в обоих классах политики

Interface IPolicy{
    int Reg {get;set;};
    string Contents {get;set;};
}

MotorPolicy : Policy,IPolicy {

 string IPolicy.Contents 
     {get;set;};


 int IPolicy.Reg 
     {get;set;};

}

HouseholdPolicy : Policy , IPolicy {
 string IPolicy.Contents 
     {get;set;};


 int IPolicy.Reg 
     {get;set;};
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...