我从this article复制了此代码,但我不知道为什么要将类内部的类定义为属性。此外,当实例化类PersonalLoan
时会发生什么?
public class PersonalLoan
{
public string AccountNumber { get; set; }
public string AccounHolderName { get; set; }
public Loan LoanDetail { get; set; }
public PersonalLoan(string accountNumber)
{
this.AccountNumber = accountNumber;
this.AccounHolderName = "Sourav";
this.LoanDetail = new Loan(this.AccountNumber);
}
}
public class Loan
{
public string AccountNumber { get; set; }
public float LoanAmount { get; set; }
public bool IsLoanApproved { get; set; }
public Loan(string accountNumber)
{
Console.WriteLine("Loan loading started");
this.AccountNumber = accountNumber;
this.LoanAmount = 1000;
this.IsLoanApproved = true;
Console.WriteLine("Loan loading started");
}
}
答案 0 :(得分:3)
我怀疑此代码段是您应该避免的示例:类LoanDetail
中Loan
类型的PersonalLoan
属性建议 has-a 班级之间的关系。换句话说,此代码段的作者试图说明
个人贷款有贷款
然而,这不太可能是他们试图建立的关系:实际上,个人贷款是贷款
关系是-a 是使用继承而非组合建模的。换句话说,他们应该写下这个:
public class PersonalLoan : Loan {
public PersonalLoan(string accountNumber) : base(accountNumber) {
...
}
...
}
另一个指向模型不正确的问题是PersonalLoan
和Loan
内的accountNumber
具有相同的PersonalLoan
,它存储在同一对象中的两个位置。当你看到这个,你知道一些事情是不对的。您获得两个帐号的原因是,当Loan
被实例化时,其构造函数也会实例化accountNumber
,并将其传递给class Address {
public string Country {get;set;}
public string City {get;set;}
... // And so on
}
class Borrower {
public Address MailingAddress {get;set;}
... //
}
。
这并不是说在其他对象中嵌入对象是错误的。例如,如果你要将借用者地址建模为一个类,你最终会得到这样的结果:
{{1}}
此模型完全有效,因为借款人有一个地址。