如何使用自定义属性覆盖属性设置器



ex。

[NoZero()]
public int Quantity{ get; set; }

基本上,我不希望数量设置为小于零。

这不是直接回答您的问题,而是提供一个有趣的替代方案。

如果你正在使用IoC框架,并且该框架具有"拦截"的可能性,你可以强制拦截你的财产访问(只要该类是通过IoC传入的(。

Ninject拦截任何具有特定属性的方法?

我自己还没有尝试过房地产准入,但理论上它是可行的。

或者,直接使用代码编织库:https://github.com/Fody/Fody这有效地将自己编织到IL中。

传统的方法是

protected int _quantity;
public int Quantity
{
set
{
if (_quantity < 0) throw new ArgumentOutOfRangeException("Some message");
_quantity = value;
}
get
{
return _quantity;
}
}

除非在设置属性之前编写检查属性的代码,否则无法真正对属性执行此操作。例如,DataAnnotation属性就是这样工作的。在文档中,请注意以下内容:

要实现上述要求,我们需要在UI层中进行编码,以适应/验证上述标准。

因此,您必须编写大量复杂的代码,并注意不要直接设置属性。这就是为什么大多数人做这件事都不具备特质的原因。

最新更新