C # инициализирующая структура с неполными параметрами + формула - PullRequest
0 голосов
/ 26 октября 2010

Я уверен, что это просто, но я смотрел на это слишком долго, и мне скоро нужен ответ. Я новичок в C #. Если я поставлю GetCommission () в структуре я получаю

ошибка CS0188: объект 'this' нельзя использовать, пока все его поля не присвоены

вне структуры

ошибка CS0038: невозможно получить доступ к нестатическому члену внешнего типа 'Ex5._3.CommissionForm' через вложенный тип 'Ex5._3.CommissionForm.salespersonFigures'

Как мне это сделать? Предостережение: часть задания заключалась в том, что комиссия рассчитывается по методу. Ни одно из найденных мной руководств по структуре не касается назначения одного члена на основе значения другого. Он должен быть кошерным, поскольку в расчетах используются только статические данные. Правильно?

// Declare class variables and constants
private const decimal WEEKLY_BASE_SALARY = 250m;
private const decimal WEEKLY_QUOTA = 1000m;
private const decimal COMMISSION_RATE = .15m;

public struct salespersonFigures
{
    // Fields
    private string salesperson;
    private decimal weeklySales;
    private decimal commission;
    private decimal pay;

    // Constructor
    public salespersonFigures(string name, decimal sales)
    {
        salesperson = name;
        weeklySales = sales;
        commission = GetCommission(sales);  // error occurs at this line
        pay = WEEKLY_BASE_SALARY + commission;
    }

    // Property

    public decimal Sales
    {
        get
        {
            return weeklySales;
        }
        set
        {
            weeklySales = value;
        }
    }

    public string Name
    {
        get
        {
            return salesperson;
        }
        set
        {
            salesperson = value;
        }
    }

    // Method

    public decimal GetCommission(decimal sales)
    {
        if (sales > WEEKLY_QUOTA)
            return sales * COMMISSION_RATE;
        else return 0m;
    }
}

Ответы [ 4 ]

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

Конструктор:

// Constructor
public salespersonFigures(string name, decimal sales)
{
    salesperson = name;
    weeklySales = sales;
    commission = GetCommission(sales);
    pay = WEEKLY_BASE_SALARY + commission;
}

интерпретируется как:

// Constructor
public salespersonFigures(string name, decimal sales)
{
    this.salesperson = name;
    this.weeklySales = sales;
    this.commission = this.GetCommission(sales);
    this.pay = WEEKLY_BASE_SALARY + this.commission;
}

Таким образом, проблемы, с которыми вы можете столкнуться, могут быть решены с помощью двух вещей:

// Constructor
public salespersonFigures(string name, decimal sales)
{
    salesperson = name;
    weeklySales = sales;
    var tempCommission = GetCommission(sales);
    commission = tempCommission
    pay = WEEKLY_BASE_SALARY + tempCommission;
}

И сделать метод GetCommission статическим

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

Почему бы просто не превратить GetCommission () в свойство: Commission.

Нет необходимости хранить комиссию как поле, это должен быть запрос к объекту SalespersonFigures

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

Очень простой обходной путь / взлом:

public salespersonFigures(string name, decimal sales)
{
      salesperson = name;
      weeklySales = sales;
      // initialize pay and commission
      pay = 0m;
      commission = 0m;
      commission = GetCommission(sales);
      pay = WEEKLY_BASE SALARY + commission;
}

И вам не нужна else часть предложения в getCommission, просто сделайте это:

public decimal GetCommission(decimal sales)
{
    if (sales > WEEKLY_QUOTA)
        return sales*COMMISSION_RATE;
    return 0m;
}

Еще одна вещь, почему вы используете decimal? Вы, вероятно, должны использовать double или float вместо этого, потому что больше методов полагаются на float и doubles, и преобразование между ними может быть дорогостоящим

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

Тебе действительно нужно поле для ввода?

private decimal commission;

Вы можете удалить его и получить свой метод в структуре.И я думаю, вам не нужен параметр продаж в методе GetComission.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...