2012-10-29 42 views
1

当我注意到虚函数Match时,我正在实现我自己的属性。 Match的正常实现是调用Equals,那为什么它存在于第一位呢?.Net Attribute.Match vs .Equals?

文档说为Match

以下当在派生类重写时,返回一个值,指示 此实例是否等于指定的对象。

文档说以下为Equals

返回一个值,该值指示此实例是否等于 指定的对象。

+1

[Match](http://msdn.microsoft.com/en-us/library/system.attribute.match.aspx)备注部分的MSDN文档给出了一个合理的示例。 – vcsjones

回答

1

remarks section in MSDN该方法解释它们的区别是:

该方法确定是否一个属性等于另一个。其默认实现与Equals相同,后者执行值和参考比较。重写此方法以实现对属性值(如标志或位域)的支持,这些属性值由自身有意义的组件组成。

例如,考虑一个属性,它的值是一个二进制字段,分成一个标志的位字段。此属性的两个实例共有一个标志,而所有其他标志不同。 Equals方法不能确定这两个实例具有相同的标志设置,但Match方法可以。

+1

换句话说,[Attribute.Match()](http://msdn.microsoft.com/en-us/library/system.attribute.match.aspx)是一种抽象方法。如果'Equals()'不够,你应该用你自己的实现覆盖它。 –

0

Match文档:

考虑它的值是一个二进制领域划分为标志的位域的属性。此属性的两个实例共有一个标志,而所有其他标志不同。 Equals方法不能确定这两个实例具有相同的标志设置,但Match方法可以。