2010-10-30 19 views
10

Ich kompilierte und führte den Quellcode erfolgreich aus, indem das Feld totalFee fehlte. Wie schreibe ich totalFee in dieses Programm, so dass es die Gesamtgebühr für jeden Job genau berechnet (Rate * Zeit)? Unten sehen Sie, dass ich versucht habe, eine Methode zu verwenden. was den Fehler CS0051 generiert hat (Inkonsistente Zugänglichkeit: Parametertyp 'Job' ist weniger zugänglich als Methode 'AddJobs.TotalPay (Job)').Fehler CS0051 (Inkonsistente Zugänglichkeit: Parametertyp 'Job' ist weniger zugänglich als Methode 'AddJobs.TotalPay (Job)')

Dieser Quellcode als Antwort auf die folgende Zuordnung:

„. Job-Klasse Haus & Garten für Harolds Design Die Klasse enthält vier Datenfelder-Job Beschreibung (zB‚wash-Fenster‘) , Zeit in Stunden, um den Job abzuschließen (für Beispiel 3.5), Stundensatz für den Job (z. B. 25,00 $), und die Gesamtkosten für der Job (Stundensatz Stunden). Fügen Sie Eigenschaften zu erhalten und setzen Sie jedes Feld außer die Gesamtgebühr - dieses Feld wird nur gelesen, und sein Wert wird jedes Mal entweder berechnet die Stundengebühr oder die Stundenzahl ist festgelegt. Überladen Sie den Operator +, so dass zwei Jobs hinzugefügt werden können. Die Summe von zwei Jobs ist ein neuer Job, der die Beschreibungen der ursprünglichen Jobs (zusammen mit "und") enthält, die Summe der Zeit in Stunden für die ursprünglichen Jobs und den Durchschnitt des Stundensatzes für die ursprünglichen Jobs. Schreiben Sie eine Main() -Funktion, die zeigt, dass alle Methoden ordnungsgemäß funktionieren. Speichern Sie die Datei als DemoJobs.cs „

Microsoft® Visual C# ® 2008, Einführung in die objektorientierte Programmierung, 3e, Joyce Farrell

Hier ist der Quellcode.

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

Hallo und Willkommen zu Stack Overflow. Ein freundlicher Hinweis, verwenden Sie die 010101-Taste in der Symbolleiste nach dem Auswählen des gesamten Codes, um es vier Leerzeichen einzurücken, auf diese Weise werden auch die Deklarationen als Code formatiert. –

Antwort

22

Sie haben keine Sichtbarkeitsmodifizierer für Ihre Klasse angegeben, die es intern macht

Versuchen Sie, diese Linie zu ändern.

class Job 

dazu:

public class Job 
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; } 
} 
1

Sie haben Recht Lasse V. Karlsen Sie einen öffentlichen Zugriffsmodifizierer auf der Vorderseite der Klasse Job hinzufügen müssen. Bei der Betrachtung des Falles, dass ein Methodenpunkt "A" den Syntaxfehler anzeigt, der angibt, dass die Person versucht hat, auf das private Feld zuzugreifen. Wenn die Person versuchen sollte, auf die Eigenschaft des Feldes zuzugreifen, anstatt auf ein Feld zuzugreifen, das ein privates Feld war.

public static void gesamtzahlung (Job-Methode) { A: A: Doppel totalFee = Job.rate * Job.time; Console.WriteLine ("Die Gesamtgebühr beträgt: {0}", TotalFee.ToString ("C")); } }

Es gab mehrere verschiedene Orte, die ähnliche Fehler hatten, folgen Sie einfach alle "A" s mit System;

öffentliche Klasse 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")); 
} 

}

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

}

+0

Willkommen bei Stackoverflow. Würden Sie gerne die Formatierung Ihrer Antwort aufräumen? – Henrik

3

es bedeutet, u eine Klasse zugreifen, die nicht öffentlich ist .. machen die Klasse Öffentlichkeit wie diese

public class Job 
{ 

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

    Time = time; 

    Rate = rate; 
    } 
Verwandte Themen