मुझे सी # में एक अजीब "असममितता" से मारा गया है कि मैं वास्तव में समझ में नहीं आता हूं। निम्नलिखित कोड देखें:ऑब्जेक्ट। एक्वाल्स वर्चुअल है, लेकिन ऑब्जेक्ट.ऑपरेटर == इसका उपयोग सी # में नहीं करता है?
using System;
using System.Diagnostics;
namespace EqualsExperiment
{
class Program
{
static void Main(string[] args)
{
object apple = "apple";
object orange = string.Format("{0}{1}", "ap", "ple");
Console.WriteLine("1");
Debug.Assert(apple.Equals(orange));
Console.WriteLine("2");
Debug.Assert(apple == orange);
Console.WriteLine("3");
}
}
}
यह आपके लिए .NET गुरुओं के लिए स्पष्ट हो सकता है, लेकिन दूसरा दावा विफल हो जाता है।
जावा में मैंने सीखा है कि == ऑब्जेक्ट नामक कुछ के लिए समानार्थी है। संदर्भ यहां। सी # में, मैंने सोचा कि ऑब्जेक्ट.ऑपरेटर == ऑब्जेक्ट.इक्वाल्स का उपयोग करता है, जो वर्चुअल है, इसलिए यह सिस्टम में है। स्ट्रिंग क्लास।
क्या कोई समझा सकता है, दूसरा दावा सी # में विफल क्यों होता है? मेरी कौन सी धारणाएं खराब हैं?
मुझे अपने प्रश्न में एक [उत्तर] (http://stackoverflow.com/questions/1766492/c-overloading-operator-versus-equals/1849288#1849288) भी मिला है। ऐसा लगता है कि 'object.operator ==' 'ऑब्जेक्ट का उपयोग करता है। संदर्भ Equals', लेकिन' string.operator == '' object.Equals' का उपयोग करता है। यह मेरे लिए प्रतिद्वंद्वी है, क्योंकि 'object.Equals' वर्चुअल है, इसलिए इसे पहले से 'object.operator =='' में उपयोग किया जा सकता है। – wigy