2010-10-30 12 views
10

J'ai compilé et exécuté le code source ci-dessous avec succès en omettant le champ totalFee. Comment écrire TotalFee dans ce programme afin qu'il calcule avec précision les frais totaux pour chaque travail (taux * temps)? Ci-dessous, vous verrez que j'ai essayé d'utiliser une méthode; qui a généré l'erreur CS0051 (Accessibilité incohérente: le type de paramètre 'Job' est moins accessible que la méthode 'AddJobs.TotalPay (Job)').Erreur CS0051 (Accessibilité incohérente: le type de paramètre 'Job' est moins accessible que la méthode 'AddJobs.TotalPay (Job)')

Ce code source est en réponse à l'affectation suivante:

« . Concevez une classe d'emploi pour les services d'accueil Harold La classe contient quatre champs d'emploi données description (par exemple, « laver les fenêtres ») , le temps en heures pour terminer le travail (pour exemple, 3.5), taux par heure facturé pour le travail (par exemple, 25,00 $), et le total des frais pour le travail (taux horaire multiplié par les heures) Inclure les propriétés pour obtenir et définir chaque champ à l'exception de le montant total de ce champ sera en lecture seule, et sa valeur est calculée chaque fois que le tarif horaire ou le nombre d'heures est fixé. Surcharge l'opérateur + afin que deux Jobs puissent être ajoutés. La somme de deux Jobs est un nouveau Job contenant les descriptions des Jobs d'origine (jointes par "et"), la somme du temps en heures pour les Jobs d'origine, et la moyenne du taux horaire pour les Jobs d'origine. Écrivez une fonction Main() qui démontre que toutes les méthodes fonctionnent correctement. Enregistrez le fichier sous DemoJobs.cs «

Microsoft® Visual C# ® 2008, Introduction à la programmation orientée objet, 3e, Joyce Farrell

Voici le code source.

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

Salut, et bienvenue à Stack Overflow. Un conseil amical, utilisez la clé 010101 sur la barre d'outils après avoir sélectionné tout le code pour indenter quatre espaces, de cette façon même les déclarations sont formatées en code. –

Répondre

22

Vous n'avez pas spécifié un modificateur de visibilité pour votre classe, ce qui le rend interne

Essayez de changer cette ligne.

class Job 

à ceci:

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

Vous avez raison Lasse V. Karlsen vous avez besoin d'ajouter un modificateur d'accès public à l'avant du travail de classe. Plus de regarder le cas qu'un point de méthode "A" montre l'erreur de syntaxe qui indique que la personne essayait d'accéder au champ privé. Lorsque la personne devait essayer d'accéder à la propriété du champ au lieu d'accéder à un champ qui était un champ privé.

TotalPay public static void (méthode d'emploi) {A: A: deux totalFee = Job.rate * Job.time; Console.WriteLine ("Le montant total est: {0}", TotalFee.ToString ("C")); } }

Il y avait plusieurs endroits différents qui avaient des erreurs similaires suivent tout le système «A»;

classe publique 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 emploi {

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

Bienvenue sur Stackoverflow. Pourriez-vous nettoyer le formatage de votre réponse? – Henrik

3

cela signifie u sont l'accès à une classe qui ne sont pas publiques .. rendre public de classe comme celui-ci

public class Job 
{ 

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

    Time = time; 

    Rate = rate; 
    } 
Questions connexes