我计划实现自己的一组约束,并且在理解如何实现Constraint
类的以下方法时遇到一些困难。
public abstract class Constraint
{
public abstract void WriteDescriptionTo( MessageWriter writer );
public virtual void WriteMessageTo( MessageWriter writer );
public virtual void WriteActualValueTo( MessageWriter writer );
}
documentation建议阅读源代码以了解如何使用它们,但我已经研究了许多约束,并且没有看到太多偏离它们的实现 - 通常是WriteDescriptionTo()
是唯一实现的方法。
根据我的观察:
WriteMessageTo()
将断言错误消息写入控制台WriteActualValueTo()
格式化赋予约束的实际参数的值,以便写入控制台但是,我不理解WriteDescriptionTo()
的目的,也不理解为什么它是抽象的 - 特别是在覆盖WriteMessageTo()
时就足够了。
答案 0 :(得分:2)
通过查看源代码,WriteDescriptionTo
方法用于在失败时写出约束的预期值。通用的两行视图用于显示失败的约束;第一行包含期望值,第二行包含实际值。
WriteDescriptionTo
是抽象的,以强制约束来实现它。方法WriteActualValueTo
用于写入实际值。这是在基类Constraint
类中实现的,并标记为虚拟。默认情况下,它只输出原始实际值,但它是虚拟的意味着每个继承的约束都可以覆盖它,并在需要时执行更具体的操作。