错误CS0563(二元运算符的参数之一必须是包含类型)

时间:2010-10-30 13:28:00

标签: c# operator-overloading instantiation

我的源代码(下面)生成了错误CS0563,因为我的CombinedJobs运算符+中的两个参数(参见源代码中的“//步骤5:...”)被列为Job(而不是int,double,等等)。如何更改此代码以消除此错误?此代码是对下面列出的分配的回应。

分配:

“为Harold的家庭服务设计一个Job类。该类包含四个数据字段-Job 描述(例如,“洗涤窗口”),完成工作的时间(以小时为单位) 例如,3.5),为工作收取的每小时费率(例如,25.00美元)和总费用 工作(每小时费率小时)。包括要获取和设置每个字段的属性 总费用 - 该字段将是只读的,并且每次都计算其值 设定每小时费用或小时数。重载+运算符使两个Jobs 可以添加。两个Jobs的总和是一个包含两者描述的新Job 原始工作(由“和”加入),原始工作的时间总和,以及 原作业的小时费率的平均值。写一个Main()函数 演示所有方法都正常工作。将文件另存为DemoJobs.cs。“

来自:Microsoft®VisualC#®2008,面向对象编程简介,3e,Joyce Farrell

源代码:

using System;

//Step 1: Creating the Job class and designating its fields

   public class Job

   {

      private string jobDescription;

      private int jobTotalTime;

      private double jobRate;

      private double jobTotalFee;


//Step 2: Using the 'this' object will allow me to designate values for 

//"this" instantiation of an object later in the program

      public string JobDescription
      {
         get
         {
            return this.jobDescription;
         }
         set
         {
            this.jobDescription = value;
         }
      }  

      public int JobTotalTime
      {
         get
         {
            return this.jobTotalTime;
         }
         set
         {
            this.jobTotalTime = value;
         }
      }  

     public double JobRate
      {
         get
         {
            return this.jobRate;
         }
         set
         {
            this.jobRate = value;
         }
      }       

    public double JobTotalFee
      {
         get
         {
            return this.jobTotalFee;
         }
         set
         {
            this.jobTotalFee = this.JobRate * this.JobTotalTime;
         }
      }  

//Step 3: Creating a method will allow me to display the different jobs 

//with their descriptions and other variable fields later in the program

   public void JobMessage()

   {

      Console.WriteLine("Job description: {0} /nTotal time needed to complete the job: {1} hours /nHourly fee: ${2} /nTotal fee for the job is: ${3}", this.JobDescription, this.JobTotalTime, this.JobRate, this.JobTotalFee);

   }


}

//Step 4: Creating two instantiations of the Job Class

public class CreateTwoJobs

{

   public static void Main()

   {

   Job jobA = new Job();

   Job jobB = new Job();


   jobA.JobDescription = "washing windows";

   jobA.JobTotalTime = 5;

   jobA.JobRate = 25.00;


   jobB.JobDescription = "walking dogs";

   jobB.JobTotalTime = 10;

   jobB.JobRate = 11.00;


   jobA.JobMessage();

   jobB.JobMessage();

   }

}


//Step 5: Creating a third instantiation of the Job Class that is a combination 

//of the first two instantiations using the overloaded + operator


public class CombinedJobs

{

   public CombinedJobs(string jobDescription, int jobTotalTime, double jobRate, double jobTotalFee)

   {

   JobDescription = jobDescription;

   JobTotalTime = jobTotalTime;

   JobRate = jobRate;

   JobTotalFee = jobTotalFee;

   }


   public static CombinedJobs operator+(Job jobA, Job jobB)

   {

   string newDescription = jobA.JobDescription + " and " + jobB.JobDescription;

   int newTotalTime = jobA.JobTotalTime + jobB.JobTotalTime;

   double newJobRate = (jobA.JobRate + jobB.JobRate) / 2;

   double newTotalFee = newJobRate * newTotalTime

   }


   public void CombinedJobMessage()

   {

      Console.WriteLine("Job description: {0} /nTotal time needed to complete the job: {1} hours /nHourly fee: ${2} /nTotal fee for the job is: ${3}", newDescription, newTotalTime, newJobRate, newTotalTime);

   }   


   public static void Main()

   {

      CombinedJobMessage();

   }

}      

1 个答案:

答案 0 :(得分:3)

operator+方法必须位于其中一个参数的类中。由于在您的情况下两个参数都是Job,因此该方法必须位于Job类中。它不能在CombinedJobs内。

此外,您将运算符声明为返回CombinedJobs,这意味着您必须实际返回它。这不会导致您描述的错误,但会导致另一个编译错误。