访问继承成员

3
我有一个继承自LoanLoanWithClient模型:
public class LoanWithClient : Loan
{
    public Client Client { get; set; }
}

如何在不必显式编写其属性的情况下访问整个继承的Loan对象?

LoanWithClient不包含名为Loan的定义。

return new LoanWithClient
{
     **Loan** = loan, //The Loan is erroring: LoanWithClient does not contain a definition for Loan
     Client = client
};

贷款类:

public class Loan
{
    public int ID { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
    //etc..
}

1
请定义名为 Loan 的类。 - Rahul
2
我认为你可能误解了“继承”的含义。它意味着派生类(LoanWithClient)继承其父类(Loan)的特征(方法、属性等)。如果既没有LoanWithClient也没有Loan属性Loan,那么在构造实例时就无法使用它。如果Loan有一个Amount属性,你可以像使用Client一样直接使用它。 - ProgrammingLlama
1
创建一个构造函数并从中调用基类构造函数。例如,请参见https://dev59.com/0HVD5IYBdhLWcg3wVKEb - DodgyCodeException
另外,你的对象模型看起来有点可疑。地址真的是贷款的属性吗? - DodgyCodeException
也许你正在寻找装饰器模式?(另请参阅:装饰器模式维基百科页面 - ProgrammingLlama
1
不要混淆"is-a"和"has-a"。LoanWithClient是一个Loan,它并没有拥有一个Loan - Damien_The_Unbeliever
2个回答

5

LoanWithClient类继承自Loan类,这意味着子类拥有父类的所有属性。但这并不意味着子类包含一个父类作为属性。您可以像这样编写类-

public class Loan
{
    public int ID { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
    //etc..
}

public class LoanWithClient
{
    public Loan Loan { get; set; }
    public Client Client { get; set; }
}

return new LoanWithClient
{
     Loan = loan,
     Client = client
};

如果您想保留类架构,可以返回以下方式-
return new LoanWithClient
{
     ID = loan.ID,
     Address = loan.Address,
     City = loan.City,
     //etc..
     Client = client
};

4

您想要

访问继承的成员

Loan 不是成员,它是父级。 像这样访问 Loan 的成员:

return new LoanWithClient
{
     ID = loan.ID,
     Address = loan.Address,
     City = loan.City,
     //etc...
     Client = client
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接