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

Noo*_*oob 1 c# operator-overloading instantiation

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

\n\n

任务:

\n\n

“为 Harold\xe2\x80\x99s Home Services 设计一个 Job 类。该类包含四个数据字段\xe2\x80\x94Job\n描述(例如,\xe2\x80\x9cwash windows\xe2\x80\x9d)、时间完成作业的小时数(例如,\n3.5)、作业的每小时费率(例如,25.00 美元)以及作业的总费用\n(每小时费率乘以小时数)。包括获取和设置每个作业的属性字段,\n总费用\xe2\x80\x94 除外,该字段为只读,并且每次\n设置每小时费用或\n小时数时都会计算其值。重载 + 运算符,以便可以\n创建两个作业添加。两个作业的总和是一个新作业,其中包含两个\原始作业的描述(由 \xe2\x80\x9cand\xe2\x80\x9d 连接)、原始作业的时间总和(以小时为单位),以及\ “原始作业的每小时平均费率。编写一个 Main() 函数,\n演示所有方法都能正常工作。将文件另存为 DemoJobs.cs。”

\n\n

来自:Microsoft\xc2\xae Visual C#\xc2\xae 2008,面向对象编程简介,3e,Joyce Farrell

\n\n

源代码:

\n\n
using System;\n\n//Step 1: Creating the Job class and designating its fields\n\n   public class Job\n\n   {\n\n      private string jobDescription;\n\n      private int jobTotalTime;\n\n      private double jobRate;\n\n      private double jobTotalFee;\n\n\n//Step 2: Using the \'this\' object will allow me to designate values for \n\n//"this" instantiation of an object later in the program\n\n      public string JobDescription\n      {\n         get\n         {\n            return this.jobDescription;\n         }\n         set\n         {\n            this.jobDescription = value;\n         }\n      }  \n\n      public int JobTotalTime\n      {\n         get\n         {\n            return this.jobTotalTime;\n         }\n         set\n         {\n            this.jobTotalTime = value;\n         }\n      }  \n\n     public double JobRate\n      {\n         get\n         {\n            return this.jobRate;\n         }\n         set\n         {\n            this.jobRate = value;\n         }\n      }       \n\n    public double JobTotalFee\n      {\n         get\n         {\n            return this.jobTotalFee;\n         }\n         set\n         {\n            this.jobTotalFee = this.JobRate * this.JobTotalTime;\n         }\n      }  \n\n//Step 3: Creating a method will allow me to display the different jobs \n\n//with their descriptions and other variable fields later in the program\n\n   public void JobMessage()\n\n   {\n\n      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);\n\n   }\n\n\n}\n\n//Step 4: Creating two instantiations of the Job Class\n\npublic class CreateTwoJobs\n\n{\n\n   public static void Main()\n\n   {\n\n   Job jobA = new Job();\n\n   Job jobB = new Job();\n\n\n   jobA.JobDescription = "washing windows";\n\n   jobA.JobTotalTime = 5;\n\n   jobA.JobRate = 25.00;\n\n\n   jobB.JobDescription = "walking dogs";\n\n   jobB.JobTotalTime = 10;\n\n   jobB.JobRate = 11.00;\n\n\n   jobA.JobMessage();\n\n   jobB.JobMessage();\n\n   }\n\n}\n\n\n//Step 5: Creating a third instantiation of the Job Class that is a combination \n\n//of the first two instantiations using the overloaded + operator\n\n\npublic class CombinedJobs\n\n{\n\n   public CombinedJobs(string jobDescription, int jobTotalTime, double jobRate, double jobTotalFee)\n\n   {\n\n   JobDescription = jobDescription;\n\n   JobTotalTime = jobTotalTime;\n\n   JobRate = jobRate;\n\n   JobTotalFee = jobTotalFee;\n\n   }\n\n\n   public static CombinedJobs operator+(Job jobA, Job jobB)\n\n   {\n\n   string newDescription = jobA.JobDescription + " and " + jobB.JobDescription;\n\n   int newTotalTime = jobA.JobTotalTime + jobB.JobTotalTime;\n\n   double newJobRate = (jobA.JobRate + jobB.JobRate) / 2;\n\n   double newTotalFee = newJobRate * newTotalTime\n\n   }\n\n\n   public void CombinedJobMessage()\n\n   {\n\n      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);\n\n   }   \n\n\n   public static void Main()\n\n   {\n\n      CombinedJobMessage();\n\n   }\n\n}      \n
Run Code Online (Sandbox Code Playgroud)\n

svi*_*ick 5

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

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