Как мне обеспечить стоимость имущества для других, которые зависят от него? - PullRequest
4 голосов
/ 06 октября 2010

У меня есть свойство, подобное этому:

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, которое является простым свойством перечисления:

public CutType PayoutType { get; set; }

Моя проблема в том, что PayoutType не устанавливается до установки PayoutValue, поэтому приведенное ниже условие никогда не выполняется.Как заставить PayoutType быть установленным до оценки PayoutValue?

Спасибо.

ОБНОВЛЕНИЕ Спасибо за ваши ответы, ребята.Думаю, я должен был упомянуть, что большую часть времени этот объект связан через DataContexts или Http.Post с моей клиентской стороны (проект MVC), поэтому у меня нет конструкторов.Есть ли другой способ, или я должен начать проявлять творческий подход с моим программированием?

Ответы [ 3 ]

2 голосов
/ 06 октября 2010

Как заставить принудительно установить PayoutType до оценки PayoutValue?

Поместите это в конструктор. Это единственный способ обеспечить соблюдение этого правила.

При этом я бы рекомендовал против этого, по крайней мере, в вашей реализации выше. Ваша текущая реализация свойств будет очень, очень запутанной для пользователей. Люди склонны ожидать, что установка свойства, а затем немедленное получение его предоставят то же значение.

В вашем случае, однако:

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)), чтобы указать пользователю на то, что он не действует как простое свойство.

1 голос
/ 06 октября 2010

Как насчет этого?

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

чтобы вы не меняли установленное значение.

0 голосов
/ 06 октября 2010

Все «обязательные» свойства должны быть в конструкторе вашего класса.

...