gpt4 book ai didi

c# - 如何将抽象类作为类型实例的参数传递?

转载 作者:太空狗 更新时间:2023-10-29 21:32:51 24 4
gpt4 key购买 nike

所以我有一个名为 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 应该是什么?我无法创建它的实例,也无法为它提供任何我不认为的东西......我想我需要另一个派生 self 的抽象类的类来提供给 FunBond ,所以我想我从根本上误解了一些东西。

最佳答案

构造函数声明它需要类型为 DayCounter 的参数。由于 DayCounter 是一个抽象类,因此您需要传递派生自 DayCounter 的类的实例。

这并不意味着您需要更改构造函数参数类型,只需传递派生类型的实例即可。

有人将参数定义为抽象类型的原因是为了允许多态和松散耦合。您可以有不同的 DayCounter 派生类,每个派生类都有不同的行为(只要它们遵守 DayCounter契约)。 FunBond 可以在不知道这些类的内部工作方式的情况下与这些类的实例对话。就 FunBond 而言,它正在与一个遵守 DayCounter 契约的对象对话,但不关心它是如何在内部实现的。

关于c# - 如何将抽象类作为类型实例的参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34767700/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com