2015-11-18 3 views
0

У меня есть простая программа с классом сотрудника и у меня есть 2 объекта в этом классе lynda и alex. Я также создал метод под названием CalculateTotalPay(), который печатает общую сумму оплаты на консоли после простого добавления salary и bonus. Прямо сейчас для печати на консоли у меня есть Console.WriteLine("Total Pay = " + totalPay);, но я хочу сделать это в Console.WriteLine("Total Pay for " + employeeName " = " + totalPay);, но я не хочу многократно осваивать новых сотрудников для новых переменных, что было бы лучшим способом сделать это?Назначение объектов переменным

Вот код

class Employee 
{ 
    public double salary; 
    public double bonus; 
    public string employeeName; 

    public void CalculateTotalPay() 
    { 
     double totalPay = salary + bonus; 
     Console.WriteLine("Total Pay = " + totalPay); 
    } 
} 

static void Main() 
{ 
    Employee alex = new Employee(); 
    Employee lynda = new Employee(); 

    alex.salary = 900000; 
    alex.bonus = 20000; 
    alex.CalculateTotalPay(); 

    lynda.salary = 100000; 
    lynda.bonus = 20000; 
    lynda.CalculateTotalPay(); 
} 
+3

Если вы не хотите назначать переменную, откуда, по вашему мнению, должна поступать информация? Вы знаете, что можете снова использовать одну и ту же переменную, верно? –

+0

Если вам нужен другой сотрудник, вы должны назначить их так или иначе. Это неизбежно. Вы можете немного его автоматизировать, например, чтение и запись данных объекта в файл или базу данных. – Adimeus

+0

получить имя от конструктора. потому что вы назначаете любое имя для объектов. в настоящее время это просто имена переменных. –

ответ

0

Вы можете использовать List<Employee> workers = new List<Employee>();. Добавить нового сотрудника легко - workers.Add(new Employee {salary = 10, bonus = 100});. И, наконец, вы можете interate над этой коллекцией:

foreach (var item in workers) 
{ 
    //TODO 
} 
2

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

class Employee 
{ 
    public double Salary { get; set; } 
    public double Bonus { get; set; } 
    public string Name { get; set; } 

    public Employee(String name, double salary, double bonus) 
    { 
     Salary = salary; 
     Bonus = bonus; 
     Name = name; 
    } 

    public void CalculateTotalPay() 
    { 
     double totalPay = Salary + Bonus; 
     Console.WriteLine("Total Pay for {0} = {1}", Name, totalPay); 
    } 
} 

Теперь вы можете просто использовать конструктор:

Employee alex = new Employee("alex", 900000, 20000); 
Employee lynda = new Employee("lynda", 100000, 20000); 

Edit: Видимо, ваша проблема немного другая. Если у вас нет внешнего источника информации, вы должны определить всех сотрудников внутри кода. Я рекомендовал бы этот путь:

List<Employee> Employees = new List<Employee> 
{ 
    new Employee("alex", 900000, 20000), 
    new Employee("lynda", 100000, 20000) 
}; 

foreach (var employee in Employees) { 
     employee.CalculateTotalPay(); 
} 

Ради удобства чтения, сделать это таким образом, и не начать делать как 3 отдельно массивы для бонусов, зарплат и имен.

+1

вам все равно нужен новый объект при вызове конструктора Employee. –

+0

Можем ли мы назвать имя, зарплату, бонусные объекты частным набором? Они не должны меняться извне класса. Разумеется, имя не должно изменяться вне класса. – mans

0

Я думаю, вы искали решение под заказ.

class Program 
{ 
    static void Main(string[] args) 
    { 
     IEnumerable<Employee> employees = new List<Employee> 
     { 
      new Employee("Alex", 900000, 20000), 
      new Employee("Lynda", 100000, 20000) 
     }; 

     foreach (var employee in employees) 
     { 
      employee.CalculatePay(); 
     } 

     Console.ReadKey(); 
    } 
} 

public class Employee 
{ 
    private readonly double _salary; 
    private readonly double _bonus; 
    private readonly string _name; 

    public double Salary { get { return _salary; } } 
    public double Bonus { get { return _bonus; } } 
    public string Name { get { return _name; } } 

    public Employee(string name, double salary, double bonus) 
    { 
     _name = name; 
     _salary = salary; 
     _bonus = bonus; 
    } 

    public void CalculatePay() 
    { 
     double totalPay = Salary + Bonus; 
     Console.WriteLine("Total Pay for Employee {0} = {1}", Name, totalPay); 
    } 
} 
Смежные вопросы