当我注意到虚函数Match
时,我正在实现我自己的属性。 Match
的正常实现是调用Equals
,那为什么它存在于第一位呢?.Net Attribute.Match vs .Equals?
文档说为Match
以下当在派生类重写时,返回一个值,指示 此实例是否等于指定的对象。
文档说以下为Equals
返回一个值,该值指示此实例是否等于 指定的对象。
当我注意到虚函数Match
时,我正在实现我自己的属性。 Match
的正常实现是调用Equals
,那为什么它存在于第一位呢?.Net Attribute.Match vs .Equals?
文档说为Match
以下当在派生类重写时,返回一个值,指示 此实例是否等于指定的对象。
文档说以下为Equals
返回一个值,该值指示此实例是否等于 指定的对象。
的remarks section in MSDN该方法解释它们的区别是:
该方法确定是否一个属性等于另一个。其默认实现与Equals相同,后者执行值和参考比较。重写此方法以实现对属性值(如标志或位域)的支持,这些属性值由自身有意义的组件组成。
例如,考虑一个属性,它的值是一个二进制字段,分成一个标志的位字段。此属性的两个实例共有一个标志,而所有其他标志不同。 Equals方法不能确定这两个实例具有相同的标志设置,但Match方法可以。
换句话说,[Attribute.Match()](http://msdn.microsoft.com/en-us/library/system.attribute.match.aspx)是一种抽象方法。如果'Equals()'不够,你应该用你自己的实现覆盖它。 –
从Match文档:
考虑它的值是一个二进制领域划分为标志的位域的属性。此属性的两个实例共有一个标志,而所有其他标志不同。 Equals方法不能确定这两个实例具有相同的标志设置,但Match方法可以。
[Match](http://msdn.microsoft.com/en-us/library/system.attribute.match.aspx)备注部分的MSDN文档给出了一个合理的示例。 – vcsjones