আমি এক্সএমএল উপাদানগুলির জন্য একটি মোড়ক লিখছি যা কোনও বিকাশকারীকে সহজেই এক্সএমএল থেকে বৈশিষ্ট্যগুলি পার্স করতে দেয়। বস্তু মোড়ানো ছাড়া মোড়কের কোনও রাজ্য নেই।
আমি নিম্নলিখিত বাস্তবায়ন বিবেচনা করছি (এই উদাহরণের জন্য সরলীকৃত) যা ==
অপারেটরের জন্য একটি ওভারলোড অন্তর্ভুক্ত করে ।
class XmlWrapper
{
protected readonly XElement _element;
public XmlWrapper(XElement element)
{
_element = element;
}
public string NameAttribute
{
get
{
//Get the value of the name attribute
}
set
{
//Set the value of the name attribute
}
}
public override bool Equals(object other)
{
var o = other as XmlWrapper;
if (o == null) return false;
return _element.Equals(o._element);
}
public override int GetHashCode()
{
return _element.GetHashCode();
}
static public bool operator == (XmlWrapper lhs, XmlWrapper rhs)
{
if (ReferenceEquals(lhs, null) && ReferenceEquals(rhs, null)) return true;
if (ReferenceEquals(lhs, null) || ReferenceEquals(rhs, null)) return false;
return lhs._element == rhs._element;
}
static public bool operator != (XmlWrapper lhs, XmlWrapper rhs)
{
return !(lhs == rhs);
}
}
আমি যেমন আইডোমেটিক সি # বুঝতে পারি, ==
অপারেটরটি রেফারেন্স সমতার জন্য এবং Equals()
পদ্ধতিটি মান সমতার জন্য। তবে এই ক্ষেত্রে, "মান" হ'ল বস্তুর মোড়কে দেওয়া কেবল একটি রেফারেন্স। সুতরাং আমি সি # এর জন্য প্রচলিত বা মূর্তিমান কি তা পরিষ্কার নয়।
উদাহরণস্বরূপ, এই কোডে ...
var underlyingElement = new XElement("Foo");
var a = new XmlWrapper(underlyingElement);
var b = new XmlWrapper(underlyingElement);
a.NameAttribute = "Hello";
b.NameAttribute = "World";
if (a == b)
{
Console.WriteLine("The wrappers a and b are the same.");
}
.... প্রোগ্রামের আউটপুটটি "র্যাপার্স এ এবং বি একই রকম" হওয়া উচিত? বা এটি কি বিজোড়, অর্থাত্ কমপক্ষে বিস্ময়ের মূল লঙ্ঘন করবে ?
Equals
আমি কখনই ওভাররড করি না==
(তবে অন্যভাবে কখনও নয়) never অলস কি অহংকারী? যদি আমি কোনও স্পষ্ট কাস্ট ব্যতীত অন্যরকম আচরণ পাই যা কমপক্ষে অবাক করে তোলে vio