मैं नीचे इस कोड के साथ उलझन में हूँ, डेवलपर वर्ग सिर्फ एक कर्मचारी क्लोन बनाने कीविधिwiseClone() विधि क्या है?
Developer devCopy = (Developer)dev.Clone();
क्लोन विधि है, तो कैसे डेवलपर डेवलपर का एक और क्लोन मिलता है।
public abstract class Employee
{
public abstract Employee Clone();
public string Name { get; set; }
public string Role { get; set; }
}
public class Typist : Employee
{
public int WordsPerMinute { get; set; }
public override Employee Clone()
{
return (Employee)MemberwiseClone();
}
public override string ToString()
{
return string.Format("{0} - {1} - {2}wpm", Name, Role, WordsPerMinute);
}
}
public class Developer : Employee
{
public string PreferredLanguage { get; set; }
public override Employee Clone()
{
return (Employee)MemberwiseClone();
}
public override string ToString()
{
return string.Format("{0} - {1} - {2}", Name, Role, PreferredLanguage);
}
}
Developer dev = new Developer();
dev.Name = "Bob";
dev.Role = "Team Leader";
dev.PreferredLanguage = "C#";
Developer devCopy = (Developer)dev.Clone();
devCopy.Name = "Sue";
Console.WriteLine(dev);
Console.WriteLine(devCopy);
/* OUTPUT
Bob - Team Leader - C#
Sue - Team Leader - C#
*/
Typist typist = new Typist();
typist.Name = "Kay";
typist.Role = "Typist";
typist.WordsPerMinute = 120;
Typist typistCopy = (Typist)typist.Clone();
typistCopy.Name = "Tim";
typistCopy.WordsPerMinute = 115;
Console.WriteLine(typist);
Console.WriteLine(typistCopy);
/* OUTPUT
Kay - Typist - 120wpm
Tim - Typist - 115wpm
*/
आमतौर पर आपको क्लोन करने की आवश्यकता होती है। आदिम फ़ील्ड अलग-अलग प्रतियां हैं - निश्चित रूप से क्लोन। MemberwiseClone का एक आदिम फ़ील्ड बदलना स्रोत ऑब्जेक्ट में नहीं देखा जाएगा। ऑब्जेक्ट संदर्भ फ़ील्ड समान हैं। किसी अन्य वस्तु को इंगित करने से दूसरे को प्रभावित नहीं होगा। हालांकि, MemberwiseCloning ऑब्जेक्ट संदर्भों के बाद सीधे एक ही ऑब्जेक्ट को इंगित करता है। क्लोनिंग केवल प्रत्यक्ष वस्तु स्तर पर होती है, यह एक पुनरावर्ती प्रक्रिया नहीं है। मेरे अनुभव में, यह आम बात नहीं है कि आपको एक रिकर्सिव गहरे क्लोन की आवश्यकता है, इसलिए मैं आमतौर पर डीप क्लोन फ़ंक्शन बनाने में परेशान नहीं होता हूं। – Todd