بعد إثقال == المشغل، وكيفية مقارنة إذا متغيرين نقطة في نفس الكائن؟

StackOverflow https://stackoverflow.com/questions/617757

سؤال

والحمولة الزائدة المشغل المقارنة، كيفية مقارنة إذا كان متغيرين نقطة لنفس الكائن (أي. لا قيمة)

public static bool operator ==(Landscape a, Landscape b)
{
    return a.Width == b.Width && a.Height == b.Height;
}

public static bool operator !=(Landscape a, Landscape b)
{
    return !(a.Width == b.Width && a.Height == b.Height);
}
هل كانت مفيدة؟

المحلول

استخدم في Object.ReferenceEquals أسلوب ثابت.

وبطبيعة الحال، حتى يتسنى لل== و! = طريقة للاحتفاظ ظائفها الكاملة، يجب عليك أيضا أن تجاوز يساوي وGetHashCode بحيث يعودون مجموعة متناسقة من الاستجابات للمتصلين.

نصائح أخرى

لتحقق ما إذا كان كلا نقطة لنفس الكائن. يجب عليك استخدام Object.ReferenceEquals الأسلوب. فإنه سيعود صحيح إذا كان كلاهما نفس أو إذا كان كلاهما باطل. إلا فإنه سيعود كاذبة

وأنا أعلم به مسألة قديمة، ولكن إذا كنت تريد الذهاب لتفرط في == أو Object.Equals الطريقة، يجب عليك أيضا تفرط في المشغل العكسي! =.

وفي هذه الحالة، منذ كنت مقارنة الأرقام الداخلية، يجب أن تفرط في عوامل المقارنة أخرى <،>، <=،> =.

والناس الذين يستهلكون صفك في المستقبل، سواء كان ذلك المستهلكين طرف ثالث، أو المطورين الذين يأخذون على التعليمات البرمجية الخاصة بك، قد تستخدم شيء من هذا القبيل CodeRush أو ريفاكتور، التي سوف تلقائيا "الوجه" منطق (وتسمى أيضا عكس مشروطة) ثم تمهيدها، للخروج من متداخلة إذا متلازمة 25. إذا لا مدوناتها ذلك، وكنت قد مثقلة المشغل == دون إثقال! = المشغل، يمكن ان يتغير المعنى المقصود من التعليمات البرمجية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top