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\nusing 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} \nRun Code Online (Sandbox Code Playgroud)\n
该operator+方法必须位于其参数之一的类内部。由于在您的情况下两个参数都是Job,因此该方法必须位于Job类内部。它不可能在里面CombinedJobs。
另外,您将运算符声明为 returned CombinedJobs,因此这意味着您必须实际返回它。这不会导致您所描述的错误,但会导致另一个编译错误。
| 归档时间: |
|
| 查看次数: |
8043 次 |
| 最近记录: |