13

totalFeeフィールドを省略して、以下のソースコードをコンパイルして実行しました。totalFeeをこのプログラムに書き込んで、各ジョブの合計料金(レート*時間)を正確に計算するにはどうすればよいですか?以下に、私がメソッドを使用してみたことがわかります。エラーCS0051を生成しました(一貫性のないアクセシビリティ:パラメータタイプ'Job'はメソッド'AddJobs.TotalPay(Job)'よりもアクセスしにくいです)。

このソースコードは、次の割り当てに対応しています。

「ハロルズホームサービスのジョブクラスを設計します。このクラスには、ジョブの説明(たとえば、「ウィンドウを洗う」)、ジョブを完了するまでの時間(たとえば、3.5)、1時間あたりの料金の4つのデータフィールドが含まれます。ジョブ(たとえば、$ 25.00)、およびジョブの合計料金(時給×時間)。合計料金を除く各フィールドを取得および設定するためのプロパティを含めます。このフィールドは読み取り専用であり、その値は毎回計算されます。時間料金または時間数が設定されます。+演算子をオーバーロードして、2つのジョブを追加できるようにします。2つのジョブの合計は、両方の元のジョブの説明(「and」で結合)、元のジョブの時間の合計、および元のジョブの時間単価の平均を含む新しいジョブです。すべてのメソッドが正しく機能することを示すMain()関数を記述します。ファイルをDemoJobs.csとして保存します。」

Microsoft®VisualC#®2008、オブジェクト指向プログラミング入門、3e、Joyce Farrell

ソースコードは次のとおりです。

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

4 に答える 4

40

クラスに可視性修飾子を指定していないため、クラスは内部になります。

この行を変更してみてください:

class Job

これに:

public class Job
于 2010-10-30T21:12:40.257 に答える
8

これは、公開されていないクラスにアクセスしていることを意味します。次のようにクラスを公開します。

public class Job
{

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

     Time = time;

     Rate = rate;
  }
于 2013-05-08T13:34:35.430 に答える
1

あなたは正しい Lasse V. Karlsen クラス Job の前に public アクセス修飾子を追加する必要があります。メソッド ポイント「A」が、個人がプライベート フィールドにアクセスしようとしたことを示す構文エラーを示しているケースを見渡します。個人がプライベート フィールドであるフィールドにアクセスする代わりに、フィールドのプロパティにアクセスしようとした場合。

public static void TotalPay(Job method) { A: A: double totalFee = Job.rate * Job.time; Console.WriteLine("合計料金: {0}", TotalFee.ToString("C")); } }

同様のエラーが発生した場所がいくつかありましたが、システムを使用しているすべての「A」に従っています。

public class AddJobs { プライベート ダブル 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"));
}

}

パブリック クラス ジョブ {

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

}

于 2011-02-16T22:18:38.853 に答える
0
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; }
}
于 2011-02-16T21:30:52.677 に答える