2010-10-30 13 views
10

Recopilé y ejecuté el código fuente siguiente con éxito al omitir el campo totalApción. ¿Cómo escribo TotalFee en este programa para que calcule con precisión la tarifa total para cada trabajo (tasa * tiempo)? A continuación, verá que traté de usar un método; que generó el error CS0051 (Accesibilidad incoherente: el tipo de parámetro 'Trabajo' es menos accesible que el método 'AddJobs.TotalPay (Trabajo)').Error CS0051 (Accesibilidad incoherente: el tipo de parámetro 'Trabajo' es menos accesible que el método 'AddJobs.TotalPay (Trabajo)')

Este código fuente es en respuesta a la siguiente asignación:

". Diseño de una clase de empleo para Servicios Inicio de Harold La clase contiene cuatro campos: Trabajar con datos descripción (por ejemplo,‘lavar ventanas’) , tiempo en horas para completar el trabajo (para ejemplo, 3.5), tarifa por hora cargada para el trabajo (por ejemplo, $ 25.00) y tarifa total para el trabajo (tarifa por hora por horas). Incluir propiedades para obtener y configure cada campo excepto la tarifa total; ese campo será de solo lectura, y su valor se calcula cada vez la tarifa por hora o el número de horas se establece. Sobrecarga el operador + para que se puedan agregar dos trabajos . La suma de dos trabajos es un trabajo nuevo que contiene las descripciones de los trabajos originales (unidos por "y"), la suma del tiempo en horas para los trabajos originales y el promedio de la tarifa por hora para los trabajos originales. Escriba una función Main() que demuestre que todos los métodos funcionan correctamente. Guarde el archivo como DemoJobs.cs "

Microsoft Visual C# ® 2008, Introducción a la programación orientada a objetos, 3e, Joyce Farrell

Aquí está el código fuente:.

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

Hola, y bienvenidos a Stack Overflow. Una pista amigable, use la tecla 010101 en la barra de herramientas después de seleccionar todo el código para sangrarlo en cuatro espacios, de esa forma incluso las declaraciones se formatean como código. –

Respuesta

22

no ha especificado un modificador de visibilidad para su clase, lo que hace que sea interno

trate de cambiar esta línea:.

class Job 

a esto:

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

Tienes razón Lasse V. Karlsen sí es necesario añadir un modificador de acceso público a la parte delantera del empleo clase. Al mirar el caso, un punto de método "A" muestra el error de sintaxis que indica que la persona estaba tratando de acceder al campo privado. Cuando la persona debería tratar de acceder a la propiedad del campo en lugar de acceder a un campo que era un campo privado.

pública TotalPay static void (método de empleo) { A: A: doble TotalFee = Job.rate * Job.time; Console.WriteLine ("La tarifa total es: {0}", TotalFee.ToString ("C")); } }

Había varios lugares diferentes que tenían errores similares simplemente siguen todos los "A" que usan el Sistema;

public class 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")); 
} 

}

clase pública de empleo {

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

Bienvenido a Stackoverflow. ¿Te importaría limpiar el formato de tu respuesta? – Henrik

3

que significa U están accediendo a una clase que no es pública .. hacer pública la clase como esta

public class Job 
{ 

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

    Time = time; 

    Rate = rate; 
    } 
Cuestiones relacionadas