Ответ 1
Вы не указали модификатор видимости для своего класса, что делает его внутренним.
Попробуйте изменить эту строку:
class Job
:
public class Job
Я скомпилировал и успешно запускал исходный код, опуская поле totalFee. Как написать totalFee в эту программу, чтобы она точно подсчитала общую плату за каждое задание (скорость * время)? Ниже вы увидите, что я попытался использовать метод; который сгенерировал ошибку CS0051 (Несогласованная доступность: тип параметра "Job" менее доступен, чем метод "AddJobs.TotalPay(Job)" ).
Этот исходный код отвечает на следующее назначение:
"Создайте класс Job для Haolds Home Services. Класс содержит четыре поля данных - Job описание (например," окна стирки "), время в часах для завершения задания (для пример 3.5), тариф за час, взимаемый за Работу (например, 25,00 долл. США), и общий сбор за Работа (почасовая ставка времени). Включить свойства для получения и установки каждого поля, кроме общая плата - это поле будет доступно только для чтения, а его значение рассчитывается каждый раз, когда часовая плата или количество часов. Перегрузите оператор +, чтобы два задания могут быть добавлены. Сумма двух Рабочих мест - это новое задание, содержащее описания обоих оригинальные задания (к которым присоединяются" и "), сумма времени в часах для оригинальных Рабочих мест и среднее значение почасовой ставки для исходных Работ. Напишите функцию Main(), которая демонстрирует, что все методы работают правильно. Сохраните файл как DemoJobs.cs."
Microsoft® Visual С# ® 2008, Введение в объектно-ориентированное программирование, 3е, Джойс Фаррелл
Вот исходный код:
using System;
public class AddJobs
{
private double totalFee;
public AddJobs(double totalFee)
{
TotalFee = totalFee;
}
public static void Main()
{
Job job1 = new Job("washing windows", 5.00, 25.00);
Job job2 = new Job("walking a dog", 3.00, 11.00);
Job job3;
job3 = job1 + job2;
Console.WriteLine("The first job description: {0} \nTotal time needed to complete the job: {1} hours \nHourly fee: {2} per hour", job1.Description, job1.Time, job1.Rate.ToString("C"));
TotalPay(job1);
Console.WriteLine("The second job description: {0} \nTotal time needed to complete the job: {1} hours \nHourly fee: {2} per hour", job2.Description, job2.Time, job2.Rate.ToString("C"));
TotalPay(job2);
Console.WriteLine("The third job description: {0} \nTotal time needed to complete the job: {1} hours \nHourly fee: {2} per hour", job3.Description, job3.Time, job3.Rate.ToString("C"));
TotalPay(job3);
}
public static void TotalPay(Job method)
{
double totalFee = Job.rate * Job.time;
Console.WriteLine("The total fee is: {0}", TotalFee.ToString("C"));
}
}
class Job
{
public Job(string description, double time, double rate)
{
Description = description;
Time = time;
Rate = rate;
}
public static Job operator+(Job first, Job second)
{
string newDescription = first.Description + " and " + second.Description;
double newTime = first.Time + second.Time;
double newRate = (first.Rate + second.Rate) / 2;
double newTotalFee = newRate * newTime;
return(new Job(newDescription, newTime, newRate));
}
public string Description {get; set;}
public double Time {get; set;}
public double Rate {get; set;}
}
Вы не указали модификатор видимости для своего класса, что делает его внутренним.
Попробуйте изменить эту строку:
class Job
:
public class Job
это означает, что вы получаете доступ к классу, который не является общедоступным. Сделайте класс общедоступным следующим образом
public class Job
{
public Job(string description, double time, double rate)
{
Description = description;
Time = time;
Rate = rate;
}
Вы правы Lasse V. Karlsen, вам нужно добавить модификатор открытого доступа в начало класса Job. Пересмотрев случай, когда точка метода "А" показывает синтаксическую ошибку, указывающую на то, что человек пытался получить доступ к закрытому полю. Когда человек должен попытаться получить доступ к свойству поля вместо доступа к полю, которое является частным полем.
public static void TotalPay (метод работы) { A: A: double totalFee = Job.rate * Job.time; Console.WriteLine( "Общая сумма: {0}", TotalFee.ToString( "C" )); } }
Было несколько разных мест, у которых были подобные ошибки, просто следуя всем "A" с помощью System;
открытый класс AddJobs { private double totalFee;
//A:
public AddJobs(double TotalFee)
{ //A:
totalFee = TotalFee;
}
public static void Main()
{
Job job1 = new Job("washing windows", 5.00, 25.00);
Job job2 = new Job("walking a dog", 3.00, 11.00);
Job job3;
job3 = job1 + job2;
Console.WriteLine("The first job description: {0} \nTotal time needed to complete the job: {1} hours \nHourly fee: {2} per hour", job1.Description, job1.Time, job1.Rate.ToString("C"));
TotalPay(job1);
Console.WriteLine("The second job description: {0} \nTotal time needed to complete the job: {1} hours \nHourly fee: {2} per hour", job2.Description, job2.Time, job2.Rate.ToString("C"));
TotalPay(job2);
Console.WriteLine("The third job description: {0} \nTotal time needed to complete the job: {1} hours \nHourly fee: {2} per hour", job3.Description, job3.Time, job3.Rate.ToString("C"));
TotalPay(job3);
}
public static void TotalPay(Job method)
{
double totalFee = method.Rate * method.Time;
Console.WriteLine("The total fee is: {0}", totalFee.ToString("C"));
}
}
публичный класс Job {
public Job(string description, double time, double rate)
{
Description = description;
Time = time;
Rate = rate;
}
public static Job operator +(Job first, Job second)
{
string newDescription = first.Description + " and " + second.Description;
double newTime = first.Time + second.Time;
double newRate = (first.Rate + second.Rate) / 2;
double newTotalFee = newRate * newTime;
return (new Job(newDescription, newTime, newRate));
}
public string Description { get; set; }
public double Time { get; set; }
public double Rate { get; set; }
}
using System;
public class AddJobs
{
private double totalFee;
public AddJobs(double TotalFee)
{
totalFee = TotalFee;
}
public static void Main()
{
Job job1 = new Job("washing windows", 5.00, 25.00);
Job job2 = new Job("walking a dog", 3.00, 11.00);
Job job3;
job3 = job1 + job2;
Console.WriteLine("The first job description: {0} \nTotal time needed to complete the job: {1} hours \nHourly fee: {2} per hour", job1.Description, job1.Time, job1.Rate.ToString("C"));
TotalPay(job1);
Console.WriteLine("The second job description: {0} \nTotal time needed to complete the job: {1} hours \nHourly fee: {2} per hour", job2.Description, job2.Time, job2.Rate.ToString("C"));
TotalPay(job2);
Console.WriteLine("The third job description: {0} \nTotal time needed to complete the job: {1} hours \nHourly fee: {2} per hour", job3.Description, job3.Time, job3.Rate.ToString("C"));
TotalPay(job3);
}
public static void TotalPay(Job method)
{
double totalFee = method.Rate * method.Time;
Console.WriteLine("The total fee is: {0}", totalFee.ToString("C"));
}
}
class Job
{
public Job(string description, double time, double rate)
{
Description = description;
Time = time;
Rate = rate;
}
public static Job operator +(Job first, Job second)
{
string newDescription = first.Description + " and " + second.Description;
double newTime = first.Time + second.Time;
double newRate = (first.Rate + second.Rate) / 2;
double newTotalFee = newRate * newTime;
return (new Job(newDescription, newTime, newRate));
}
public string Description { get; set; }
public double Time { get; set; }
public double Rate { get; set; }
}