c# - 创建继承接口的对象
问题描述
我有两个模型接口ILoanModel
和IAmortizationModel
.
public interface ILoanModel
{
string ID { get; set; }
IEmployeeModel Borrower { get; set; }
// ******* other propeties *********
ICollection<Model.IAmortizationModel> AmortizationTable { get; set; }
}
public interface IAmortizationModel
{
string ID { get; set; }
ILoanModel Loan { get; set; }
// ******* other propeties *********
}
我创建了另一个接口来处理计算和其他功能
public interface IAmortization
{
// Compute and generate amortization table
Model.ILoanModel Generate(Model.ILoanModel loan);
// **** Other function *****
}
目前我有 3 种类型的贷款,它们都有相同的计算方式和摊销表的生成方式。
public abstract class Amortization : Controller.Computation.Interface.IAmortization
{
public virtual Model.ILoanModel Generate(Model.ILoanModel loan)
{
// **** other code *******
//Create the amortization table
decimal last_Amortization_RunningBalance = loan.Amount;
loan.AmortizationTable = new List<Model.IAmortizationModel>();
for (int x = 1; loan.NumberOfPayment >= x; x++)
{
// having problem here because Model.IAmortizationModel is a interface
var newAmortizationRow = new Model.IAmortizationModel
{
ID = Guid.NewGuid().ToString(),
AmortizationAmount = loan.AmortizationPaymentAmount,
AmortizationInterest = loan.AmortizationPaymentAmount* loan.Nominal,
AmortizationPrepayment =
loan.AmortizationPaymentAmount
- (loan.AmortizationPaymentAmount * loan.Nominal),
AmortizationOutstandingBalance =
last_Amortization_RunningBalance
- (loan.AmortizationPaymentAmount
- (loan.AmortizationPaymentAmount * loan.Nominal)),
Sequence = x
};
last_Amortization_RunningBalance -=
newAmortizationRow.AmortizationOutstandingBalance;
loan.AmortizationTable.Add(newAmortizationRow);
}
}
}
我现在的问题是生成IAmortizationModel
将添加到loan.AmortizationTable
. 如何获取loan.AmortizationTable
和创建的类型?
解决方案
一种选择是使其通用并添加通用约束new()
:
public virtual Model.ILoanModel Generate<T>(Model.ILoanModel loan)
where T:IAmortizationModel, new()
然后打电话new T()
另一种选择是传递一个生成器函数:
public virtual Model.ILoanModel Generate(Model.ILoanModel loan,
Func<IAmortizationModel> generator)
并打电话generator()
推荐阅读
- java - Spring 配置文件未从 application.properties 读取值
- python - 将文本中的字母添加到字典中而无需标点符号的功能
- mysql - 错误 1005 (HY000) mySql,在小型数据库上
- python-3.x - Python 3 - 使用 concurrent.futures 并行调用 .exe 的多个实例
- javascript - 样式滚动条仅在 Windows 上,不在 Mac 上
- c++11 - 使用 Wasm-ld 链接库时出错:std 函数上的符号类型 mimsatch
- google-admin-sdk - 目录 API 缺少用户的“网站 []”对象
- sql - 试图在 Laravel 中发布一个对象数组。ErrorException:从文件中的空值创建默认对象
- javascript - 为什么 useEffect 呈现意外的值?
- php - 将单选按钮添加到标准 Wordpress 注册表单