2015-11-18 105 views
0

我有一个简单的程序与雇员类,我有这个类lyndaalex 2个对象,我还创建了一个方法称为CalculateTotalPay()打印总薪酬控制台后简单添加salarybonus。现在的打印到控制台我有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在此collection:

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); 

编辑:显然你的问题有点不同。 如果您没有外部信息来源,则必须在代码中定义所有员工。我建议是这样的:

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); 
    } 
}