Ошибка CS0051 (Несогласованная доступность: тип параметра «Задание» менее доступен, чем метод «AddJobs.TotalPay (Job)») - PullRequest
11 голосов
/ 31 октября 2010

Я успешно скомпилировал и запустил приведенный ниже исходный код, пропустив поле totalFee.Как записать totalFee в эту программу, чтобы она точно рассчитывала общую плату за каждую работу (ставка * время)?Ниже вы увидите, что я пытался использовать метод;из-за которого возникла ошибка CS0051 (Несоответствующая доступность: тип параметра «Job» менее доступен, чем метод «AddJobs.TotalPay (Job)»).

Этот исходный код является ответом на следующее назначение:

"Разработка класса заданий для домашних служб Гарольда. Класс содержит четыре поля данных - описание задания (например,"мытье окон »), время в часах для завершения работы (например, 3,5), почасовая ставка, взимаемая за работу (например, 25,00 долл. США), и общая плата за работу (почасовая оплата в часах). Включите свойства для получения и установки каждого поля, кроме общей платы - это поле будет доступно только для чтения, и его значение рассчитывается каждый раз, когда устанавливается почасовая оплата или количество часов. Перегрузите оператор +, чтобы дваЗадания могут быть добавлены. Сумма двух заданий - это новое задание, содержащее описания обоих исходных заданий (с добавлением «и»), сумму времени в часах для исходных заданий и среднее значение почасовой ставки дляоригинальные задания. Напишите функцию Main (), которая демонстрирует правильную работу всех методов. Сохраните файл как DemoJobs.cs. "

Microsoft® Visual C # ® 2008, Введение в объектно-ориентированное программирование, 3e, Джойс Фаррелл

Вот исходный код:

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's 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's 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's 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;}
}

Ответы [ 4 ]

29 голосов
/ 31 октября 2010

Вы не указали модификатор видимости для своего класса, который делает его внутренним.

Попробуйте изменить эту строку:

class Job

на эту:

public class Job
5 голосов
/ 08 мая 2013

это означает, что вы обращаетесь к классу, который не является общедоступным ... сделайте этот класс общедоступным, как это

public class Job
{

  public Job(string description, double time, double rate)
  {
     Description = description;

     Time = time;

     Rate = rate;
  }
1 голос
/ 17 февраля 2011

Вы правы, Лассе В. Карлсен, вам нужно добавить модификатор публичного доступа в начало класса Job.Рассматривая случай, когда метод точки «А» показывает синтаксическую ошибку, которая указывает, что человек пытался получить доступ к закрытому полю.Когда человек должен попытаться получить доступ к свойству поля вместо доступа к полю, которое было частным полем.

public static void TotalPay (метод Job) {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's 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's 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's 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; }

}

0 голосов
/ 17 февраля 2011
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's 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's 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's 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; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...