将类声明为另一个类中的属性
本文关键字:属性 声明 另一个 | 更新日期: 2023-09-27 18:28:41
我从这篇文章中复制了这段代码,我不知道为什么要将类中的类定义为属性。另外,当类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");
}
}
我怀疑这个代码片段是你应该避免的一个例子:类PersonalLoan
中LoanDetail
类型Loan
的属性暗示了类之间的关系。换句话说,这个代码片段的作者试图说
个人贷款有贷款
然而,这不太可能是他们试图建立的关系:实际上,
个人贷款是一种贷款
关系 is-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;}
... //
}
这个模型是完全有效的,因为借款人有一个地址。