मैं बस मेरे लिए कुछ अजीब कुछ आया: जब आप एक मान प्रकार पर समान() विधि का उपयोग करते हैं (और यदि यह विधि निश्चित रूप से अतिरंजित नहीं हुई है) तो आपको कुछ बहुत मिलता है धीमी - फ़ील्ड की तुलना की जाती है प्रतिबिंब का उपयोग कर एक से एक! जैसा कि:सी # - वैल्यू टाइप बराबर विधि - संकलक प्रतिबिंब का उपयोग क्यों करता है?
public struct MyStruct{
int i;
}
(...)
MyStruct s, t;
s.i = 0;
t.i = 1;
if (s.Equals(t)) /* s.i will be compared to t.i via reflection here. */
(...)
मेरा प्रश्न: सी # कंपाइलर मूल्य प्रकारों की तुलना करने के लिए एक सरल विधि क्यों नहीं उत्पन्न करता है? की तरह कुछ (MyStruct की परिभाषा में):
public override bool Equals(Object o){
if (this.i == o.i)
return true;
else
return false;
}
संकलक जानता संकलन समय पर MyStruct के क्षेत्र क्या कर रहे हैं, कारण है कि यह क्रम तक इंतजार करता MyStruct क्षेत्रों की गणना करने में?
मेरे लिए बहुत अजीब।
धन्यवाद :)
जोड़ा: क्षमा करें, मैं बस एहसास है कि, ज़ाहिर है, Equals
एक भाषा कीवर्ड लेकिन एक क्रम तरीका नहीं है ... संकलक इस विधि से पूरी तरह अनजान है। तो यह प्रतिबिंब का उपयोग करने के लिए यहाँ संवेदना बनाते हैं।
देख "बराबर के मानक कार्यान्वयन का उपयोग करने के लिए, अपने मान प्रकार बॉक्सिंग और संदर्भ प्रकार System.ValueType का एक उदाहरण के रूप में पारित किया जाना चाहिए। The विधि के बराबर है तो प्रदर्शन करने के लिए प्रतिबिंब का उपयोग करता है तुलना। " - msdn.microsoft.com/en-us/library/ff647790.aspx – MrPhil