我正在从事保险业务,有两种不同的保单类型-机动车和家庭保险,由两种不同的类别代表,即机动车和家庭保险。

两者都有一些共同的数据,因此它们都将从另一个称为Policy的类继承。当用户登录应用程序时,他们可能拥有汽车或家庭政策,因此应用程序需要显示通用信息以及汽车或家庭独有的信息。为了封装所有这些,我有一个包含 Motor 成员和 Household 成员的响应对象,如下所示:

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;
    ...
}

我曾尝试使用泛型,但找不到正确的解决方案。

最佳答案

您的响应只需要一个 Policy 类型,然后您可以将 MotorPolicy 或 HouseholdPolicy 类型存储到其中。

然后您的响应只需要检查数据类型

if (response.Policy is MotorPolicy) ....

或者,使用抽象方法或属性从 Policy 类型的抽象方法返回数据,该方法完全由子类实现,并返回适当的 reg 数据或内容数据。

关于C#类继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3864508/

10-10 04:18