所以我有一个名为FunBond
的类型,带有这样的默认构造函数
public FunBond(int id,
string name,
Currency currency,
double notional,
DateTime maturityDate,
List<CashFlowWithDate> couponCashFlows,
DayCounter dayCounter)
: base(id, name, notional, InstrumentType.FixedRateBond, currency, maturityDate, dayCounter)
{
...
}
DayCounter
是一个抽象类public abstract class DayCounter
{
public abstract string Name();
public abstract double YearFraction(DateTime d1, DateTime d2);
public abstract int DayCount(DateTime d1, DateTime d2);
}
现在我的问题是,我应该提供什么作为
DayCounter
来生成FunBond
的实例?我可以指定id,名称,货币,...等作为参数传递给FunBond
,但是DayCounter
应该是什么?我无法创建它的实例,也无法提供我不认为的任何东西...我想我需要从我的抽象类派生的另一个类提供给FunBond
,所以我认为我误会了一些东西从根本上说。 最佳答案
构造函数声明它需要一个DayCounter
类型的参数。由于DayCounter
是抽象类,因此您需要传递从DayCounter
派生的类的实例。
这并不意味着您需要更改构造函数参数类型,只需传递派生类型的实例即可。
有人定义抽象类型参数的原因是允许多态和松散耦合。您可以拥有DayCounter
的不同派生类,每个派生类的行为都不同(只要它们遵守DayCounter
的约定)。 FunBond
可以在不知道它们内部如何工作的情况下与此类实例进行对话。就FunBond
而言,它是在遵循DayCounter
契约的对象讲话,但不在乎其内部实现方式。
关于c# - 如何将抽象类作为类型实例的参数传递?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34767700/