我正在创建员工图表,我真的不知道出了什么问题。我对此完全陌生。

时间:2013-11-16 17:59:46

标签: c# class derived

这是我的任务,我无法让我的班级与主人合作,有人可以帮助我吗?这是应该在星期二,我已经尝试过的每一种方法都在打砖墙。我的所有课程和表格都已发布。请帮助我,我完全迷失和沮丧

  1. 员工和ProductionWorker类
  2. 创建一个具有以下数据属性的Employee类:

    • 员工姓名
    • 员工编号

    接下来,创建一个名为ProductionWorker的类,该类派生自Employee类。

    ProductionWorker类应具有保存以下数据的属性:

    • 班次编号(整数,例如1,2或3)
    • 每小时工资率工作日分为两个班次:白天和黑夜。

    Shift属性将包含一个整数值,表示员工的工作班次。白班是班次1,夜班班次是班次2.

    创建一个创建ProductionWorker类对象的应用程序,并允许用户为每个对象的属性输入数据。检索对象的属性并显示其值。


    这是我的员工参考图表,用于存储他们的姓名和I.D号码。 我在这堂课上没有编译错误,但是我不确定我是不是 这样做是正确的,因为在我的主要内容中我得到了一个编译错误。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace Employee_References
    {
    class Roster
    {
         // Field for name, ID, dept, and position  
         private const int NAMES = 100;
         private static string [] employee = new string [NAMES];
         private const int NUMBER = 100;
         private static int [] id = new int [NUMBER];
         private int total = 0;
    
    
    
         public void Employee()
         {
             total = 0;
         }
    
       // This will recieve input from my main 
       public static void employeeName (string [] xArray)   
    
        {
    
    
                for (int index = 0; index < xArray.Length; index++)
                {
                    xArray[index] = employee[NAMES];
                }
    
    
    
        }
    
    
       // This will recieve input from my main 
       public static void idNumber ( int [] zArray)
        {
           for (int index = 0; index < zArray.Length; index++)
            {
                zArray[index] = id[NUMBER];
            }
        }
    
    
         }
    
    
    
    } 
    

    这将是我从我的第一堂课派生的下一堂课。该类假设存储班次号码1到4,以及小时工资制定者用于白天和夜班。我在这个课程中得到一个编译错误,上面写着“作业的左侧必须是变量,属性或索引器”我不确定它是什么告诉我,有人可以解释一下它试图告诉我的是什么。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace Employee_References
    {
        class References : Roster
    {
    
         // Field for name, ID, dept, and position  
    
         private int shift;
         private static const double PAYRATEDAY = 12.75;
         private static const double PAYRATENIGHT = 15.75;
    
    
    
         public void Employee()
         {
    
         }
    
       // This will recieve input from my main 
       public int shifts   
    
        {  
            set {shift = value;}  // this set the recieve value of name one and set it to name1
            get {return shift; }  //this will get name1 and send it to my main.
    
        }
    
    
       // This will recieve input from my main 
       public double payrate1 
        {
            set { PAYRATEDAY = value; } // ERROR!!The left-hand side of an assignment must be a variable, property or indexer
            get { return PAYRATEDAY; }  
    
        }
    
    
       // This will recieve input from my main 
       public double payrate2 
         {
             get { return PAYRATENIGHT; } // ERROR!!The left-hand side of an assignment must be a variable, property or indexer
               set { PAYRATENIGHT = value; }          
         }
    }
    

    这是我的Main,我正在尝试分配将在此表单中输入的输入值,并将它们传递到我的“Roster”类中,该类具有100的数组。我怎么一直得到一个编译错误说“无法分配给'employeeName',因为它是'方法组”。我不确定它能告诉我一些人可以向我解释这一点,并给我一些关于如何做到这一点的指针。

    using System;
    using System.Windows.Forms;
    
    namespace Employee_References
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }
    
    
    
            private void button1_Click(object sender, EventArgs e)
            {
                Roster Chart = new Roster();
                Chart.employeeName = name.Text; // Error **Cannot assign to 'employeeName' because it is a 'method group**".  
    
    
            }
    
    
    
    
        }
    }
    

2 个答案:

答案 0 :(得分:3)

我已经这样做了(希望这可以帮到你)

首先,我制作了员工类

 public class Employee
 {
    public string EmployeeName { get; set; }
    public int EmployeeNumber { get; set; }
 }

然后我创建了继承Employee

两个属性的类ProductionWorker
public class ProductionWorker : Employee
{
    public float HourlyPayRate { get; set; }
    public Shift Shift { get; set; }
}

我制作了一个公开枚举,因此代码更具可读性

 public enum Shift
 {
    Day,
    Night
 }

在main中你可以简单地创建一个ProductionWorker,然后你可以做类似的事情

        ProductionWorker productionWorker = new ProductionWorker();
        productionWorker.EmployeeName = "Goofy";
        productionWorker.EmployeeNumber = 123;
        productionWorker.HourlyPayRate = 5;
        productionWorker.Shift = Shift.Day;//Or night as you want
        //Then you simply print the properties like that
        Console.WriteLine(productionWorker.EmployeeName);
        //Etc...

编辑1

当然,您可以在Enum对象中分配所需的所有数字

 public enum Shift
 {
    Day=50,
    Night=25
 }

但在这种情况下不建议使用(在其他情况下:例如,如果你想使用枚举作为标志)。它更常用于检查枚举,然后在变量中进行计算,例如

    float salary = 0F;
    ProductionWorker productionWorker = new ProductionWorker();
    productionWorker.EmployeeName = "Goofy";
    productionWorker.EmployeeNumber = 123;
    productionWorker.HourlyPayRate = 5;
    productionWorker.Shift = Shift.Day;//Or night as you want
    if(productionWorker.Shift.Equals(Shift.Day))
        salary = productionWorker.HourlyPayRate*yourCostant;
    else
        salary = productionWorker.HourlyPayRate*otherYourCostant;
    //Then you simply print the properties like that
    Console.WriteLine(productionWorker.EmployeeName);

编辑2 这是完整的枚举对象

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Example_Enum
{
public enum Shift 
{
    Day/* = 50 this is optional by default is 0*/,
    Night/* = 0.12 this is optional by default is 1*/
}
}

编辑3 如果你想存储多个bioWorker,你可以做类似的事情

1)首先,all声明一个像这样的全局List

private List<ProductionWorker> pw =n ew ProductionWorker();

2)将ProductionWorker类添加到列表中(例如)

private void btn_Ok(EventArgs e, object sender)
{ 
    //Before add the class check that all fields are complete!
    pw.Add(new ProductionWorker{EmployeeName = "Goofy",EmployeeNumber = 123, HourlyPayRate = 5, Shift = Shift.Day});
}

这是一个简单的实现,如果你想做得更好,你必须检查EmployeeNumber是否已经存在。你可以用两种方式做到这一点

1)使用foreach

bool find = false;
foreach(ProductionWorker w in pw)
   if(v.EmployeeNumber.Equals(EmployeeNumberInput))
   {
      find = true; 
      break;
   }

2)或者你现在可以使用System.Linq这是一种更惯用的方法

(我还建议遵循.NET命名约定。)

var temp=pw.Find(item=> item.EmployeeNumber.Equals(EmployeeNumberInput))
if(temp!=null)
//ID already exist show an error
else{
    //Add a new object to list
}

答案 1 :(得分:1)

当你在树林里迷失方向时,退一步将问题分成较小的任务通常是一个好主意。

  

创建一个具有以下数据属性的Employee类:

     
      
  • 员工姓名
  •   
  • 员工编号
  •   

我从那开始。

这是一个nice example(我发现它在谷歌上搜索“c# class with properties”)如果这看起来有点令人生畏。