كيف يمكنني التأكد من قيمة الممتلكات للآخرين الذين يعتمدون عليها؟

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

سؤال

لدي خاصية مثل ذلك:

private Decimal _payout; 
public Decimal PayoutValue
    {
        get { return _payout; }
        set
        {
            _payout = value;

            //second part of following conditional is an enum
            if (Math.Abs(value) > 1 && this.PayoutType == CutType.Percent)
            {
                _payout /= 100;
            }
        }
    }

كما ترون ، فهو يعتمد على قيمة PayoutType, ، وهي مجرد خاصية ENUM بسيطة:

public CutType PayoutType { get; set; }

مشكلتي هي ذلك PayoutType لا يبدو أنه يتم تعيينه من قبل PayoutValue تم تعيينه ، وبالتالي فإن الشرطية أدناه ليست صحيحة. كيف أجبر PayoutType ليتم تعيينه من قبل PayoutValue تم التقييم؟

شكرًا.

تحديث شكرا على الاجابة. أظن أنه كان ينبغي عليّ أن أذكر أن هذا الكائن في معظم الوقت يرتبط عبر DataContexts أو من http.post من جانب موكلي (مشروع MVC) ، لذلك ليس لدي أي منشئات. هل هناك أي طريقة أخرى ، أم يجب أن أبدأ الإبداع في برمجتي؟

هل كانت مفيدة؟

المحلول

وماذا عن هذا ؟

get
{
   if (Math.Abs(value) > 1 && this.PayoutType == CutType.Percent)
   {
      return _payout /100;
   }
   return _payout;
}
set{_payout = value;}

حتى لا تغير القيمة التي تم تعيينها.

نصائح أخرى

كيف يمكنني إجبار الدفع على أن يتم تعيينها قبل تقييم قيمة الدفع؟

ضعه في المُنشئ. هذه هي الطريقة الوحيدة لفرض هذه القاعدة.

ومع ذلك ، أود أن أوصي ضد هذا ، على الأقل في تنفيذك أعلاه. سيكون تطبيق الممتلكات الحالي الخاص بك مربكًا للغاية للمستخدمين. يميل الناس إلى توقع وضع عقار ، ثم جلبه على الفور سيوفر نفس القيمة.

في حالتك ، على الرغم من:

decimal value = 45.3;
myObject.PayoutValue = value; // Set this

if (myObject.PayoutValue != value)
{
    // This would normally be a very unexpected case!  In your example, it will always be true!
}

سيكون من الأفضل استخدام خصائصين ، أو طريقة (أي: SetPayoutValue(decimal value)) لتدفق المستخدم على حقيقة أنه لا يتصرف مثل خاصية بسيطة.

يجب أن تكون جميع خصائص "المطلوبة" في مُنشئ فصلك.

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