當我注意到虛函數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