首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建继承接口的对象

创建继承接口的对象
EN

Stack Overflow用户
提问于 2021-05-19 03:04:22
回答 1查看 80关注 0票数 0

我有两个模型接口ILoanModelIAmortizationModel

代码语言:javascript
复制
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 *********
}

我创建了另一个处理计算和其他函数的接口。

代码语言:javascript
复制
public interface IAmortization
{
    // Compute and generate amortization table
    Model.ILoanModel Generate(Model.ILoanModel loan);
    // **** Other function *****
}

目前,我有三种类型的贷款,它们都有相同的计算方法和生成摊销表。

代码语言:javascript
复制
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的类型并创建?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-19 03:41:02

一种选择是将其变为泛型,并使用new()添加一个泛型约束。

代码语言:javascript
复制
public virtual Model.ILoanModel Generate<T>(Model.ILoanModel loan)
   where T:IAmortizationModel, new()

然后调用new T()

另一种选择是传递一个生成器函数:

代码语言:javascript
复制
public virtual Model.ILoanModel Generate(Model.ILoanModel loan,
  Func<IAmortizationModel> generator)

打电话给generator()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67596339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档