Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建继承接口的对象_C#_Oop_Abstract Class - Fatal编程技术网

C# 创建继承接口的对象

C# 创建继承接口的对象,c#,oop,abstract-class,C#,Oop,Abstract Class,我有两个模型接口ILoanModel和IAmortizationModel 公共接口模型 { 字符串ID{get;set;} IEmployeeModel借款人{get;set;} //*******其他财产********* ICollection摊销表{get;set;} } 公共接口分类模型 { 字符串ID{get;set;} ILoanModel Loan{get;set;} //*******其他财产********* } 我创建了另一个接口来处理计算和其他功能 public接口分类

我有两个模型接口
ILoanModel
IAmortizationModel

公共接口模型
{
字符串ID{get;set;}
IEmployeeModel借款人{get;set;}
//*******其他财产*********
ICollection摊销表{get;set;}
}
公共接口分类模型
{
字符串ID{get;set;}
ILoanModel Loan{get;set;}
//*******其他财产*********
}
我创建了另一个接口来处理计算和其他功能

public接口分类
{
//计算并生成摊销表
Model.ILoanModel生成(Model.ILoanModel贷款);
//****其他职能*****
}
目前我有3种类型的贷款,它们都有相同的计算方法和摊销表的生成

公共抽象类摊销:Controller.Computation.Interface.IAmortization
{
公共虚拟模型.ILoanModel生成(模型.ILoanModel贷款)
{
//****其他代码*******
//创建摊销表
小数点后最后摊销余额=贷款金额;
loan.amorizationTable=新列表();
对于(int x=1;loan.NumberOfPayment>=x;x++)
{
//这里有问题,因为Model.IAmortizationModel是一个接口
var newamorizationRow=新模型.IAmortizationModel
{
ID=Guid.NewGuid().ToString(),
摊销金额=贷款。摊销付款金额,
摊销利息=贷款。摊销付款金额*贷款。名义,
摊销预付款=
贷款.摊销付款金额
-(贷款.摊销付款金额*贷款.名义金额),
摊销未付余额=
最后摊销余额
-(贷款.摊销付款金额
-(loan.AmorizationPaymentAmount*loan.Nominal)),
序列=x
};
上次摊销余额-=
newamorizationRow.amorizationOutstandingBalance;
loan.amorizationTable.Add(newamorizationRow);
}
}
}

我现在的问题是生成新的
IAmortizationModel
,该模型将添加到
loan.amorizationtable
。如何获取贷款.amorizationTable的类型并创建?

一个选项是将其设置为泛型,并使用
new()
添加泛型约束:


并调用
generator()

为什么要使用接口?您是否有贷款模型和摊销模型的多个实现?如果您这样做了,并且确实需要实例化一个对象,那么您可以将该方法设置为泛型,并为其添加一个
new()
约束。@IanMercer是的,请对汽车贷款和紧急贷款进行示例。汽车贷款有一个字段,其中需要指定汽车品牌和型号,而紧急贷款需要发生什么紧急情况。IMHO添加一个受保护的抽象IAmortizationModel工厂(…)方法。
public virtual Model.ILoanModel Generate<T>(Model.ILoanModel loan)
   where T:IAmortizationModel, new()
public virtual Model.ILoanModel Generate(Model.ILoanModel loan,
  Func<IAmortizationModel> generator)