كيف يمكنني التأكد من قيمة الممتلكات للآخرين الذين يعتمدون عليها؟
-
28-09-2019 - |
سؤال
لدي خاصية مثل ذلك:
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)
) لتدفق المستخدم على حقيقة أنه لا يتصرف مثل خاصية بسيطة.
يجب أن تكون جميع خصائص "المطلوبة" في مُنشئ فصلك.