2011-05-25 22 views
20

No puedo resolver esto. El problema es que la distancia, el club, el cleanclub, el hoyo, los puntajes y el par dicen inaccesibles debido al nivel de protección y no sé por qué porque pensé que lo hice todo bien.es inaccesible debido a su nivel de protección

namespace homeworkchap8 
{ 
    public class Clubs 
    { 
     protected string club; 
     protected string distance; 
     protected string cleanclub; 
     protected string scores; 
     protected string par; 
     protected string hole;    

     public string myclub 
     { 
      get { return club; } 
      set {club = value; } 
     }   
     public string mydistance 
     { 
      get { return distance; } 
      set { distance = value; } 
     }   
     public string mycleanclub 
     { 
      get { return cleanclub; } 
      set { cleanclub = value; } 
     }  
     public string myscore 
     { 
      get { return scores; } 
      set { scores = value; } 
     }  
     public string parhole 
     { 
      get { return par; } 
      set { par = value; } 
     }  
     public string myhole 
     { 
      get { return hole; } 
      set { hole = value;} 
     } 
    } 
} 

esta es la clase derivada:

namespace homeworkchap8 
{ 
    public class SteelClubs : Clubs, ISwingClub 
    { 
     public void SwingClub() 
     { 
      Console.WriteLine("You hit a " + myclub + " " + mydistance); 
     } 

     public void clean() 
     { 
      if (mycleanclub != "yes") 
      { 
       Console.WriteLine("your club is dirty"); 
      } 
      else 
      { 
       Console.WriteLine("your club is clean"); 
      } 
     } 

     public void score() 
     { 
      Console.WriteLine("you are on hole " + myhole + " and you scored a " + 
       myscore + " on a par " + parhole); 
     }    
    } 
} 

Ésta es la interfaz:

namespace homeworkchap8 
{ 
    public interface ISwingClub 
    { 
     void SwingClub(); 
     void clean(); 
     void score(); 
    } 
} 

aquí es el código principal:

namespace homeworkchap8 
{ 
    class main 
    {  
     static void Main(string[] args) 
     {  
      SteelClubs myClub = new SteelClubs(); 
      Console.WriteLine("How far to the hole?"); 
      myClub.distance = Console.ReadLine(); 
      Console.WriteLine("what club are you going to hit?"); 
      myClub.club = Console.ReadLine(); 
      myClub.SwingClub(); 

      SteelClubs mycleanclub = new SteelClubs(); 
      Console.WriteLine("\nDid you clean your club after?"); 
      mycleanclub.cleanclub = Console.ReadLine(); 
      mycleanclub.clean(); 

      SteelClubs myScoreonHole = new SteelClubs(); 
      Console.WriteLine("\nWhat hole are you on?"); 
      myScoreonHole.hole = Console.ReadLine(); 
      Console.WriteLine("What did you score on the hole?"); 
      myScoreonHole.scores = Console.ReadLine(); 
      Console.WriteLine("What is the par of the hole?"); 
      myScoreonHole.par = Console.ReadLine(); 

      myScoreonHole.score(); 

      Console.ReadKey();  
     } 
    } 
} 
+6

Bienvenido a SO. Intente formatear el código con el widget de código y evite txtspk. He editado tu pregunta esta vez para ponerla en orden. – Jamiec

Respuesta

20

En su clase base Clubs Se declaran protected

  • del club;
  • distancia;
  • cleanclub;
  • anota;
  • par;
  • agujero;

lo que significa que solo se puede acceder a ellos por la clase en sí o cualquier clase que derive de Clubs.

En su código main, que intenta acceder a estos fuera de la clase en sí. por ejemplo:

Console.WriteLine("How far to the hole?"); 
myClub.distance = Console.ReadLine(); 

Usted ha proporcionado accesos públicos (de forma algo correcta) a estas variables. por ejemplo:

public string mydistance 
{ 
    get 
    { 
     return distance; 
    } 
    set 
    { 
     distance = value; 
    } 
}   

que significa que su código principal podría ser cambiado a

Console.WriteLine("How far to the hole?"); 
myClub.mydistance = Console.ReadLine(); 
5

Dan, sólo eres tú está accediendo al campo protegido en lugar de propiedades.

Véase, por ejemplo, esta línea en su Main(...):

myClub.distance = Console.ReadLine();

myClub.distance es el campo de protección, mientras que desea establecer la propiedad mydistance .

Solo te estoy dando una pista, no voy a corregir tu código, ¡ya que es tarea! ;)

2

En su método principal, está intentando acceder, por ejemplo, club (que está protegido), cuando debe acceder al myclub que es la propiedad pública que ha creado.

0

Debe utilizar las propiedades públicas de Main, y no intente cambiar directamente las variables internas.

4
myClub.distance = Console.ReadLine(); 

debería ser

myClub.mydistance = Console.ReadLine(); 

utilizan sus propiedades públicas que se han definido para los demás en lugar de los miembros campo de protección.

+0

muchas gracias me siento estúpido por no ver eso o al menos intentar eso – dan

0

Esto se debe a que no puede acceder a los datos de miembros protegidos a través de su instancia de clase. Debe corregir el código de la siguiente manera:

namespace homeworkchap8 
{ 
    class main 
    {  
     static void Main(string[] args) 
     {  
      SteelClubs myClub = new SteelClubs(); 
      Console.WriteLine("How far to the hole?"); 
      myClub.mydistance = Console.ReadLine(); 
      Console.WriteLine("what club are you going to hit?"); 
      myClub.myclub = Console.ReadLine(); 
      myClub.SwingClub(); 

      SteelClubs mycleanclub = new SteelClubs(); 
      Console.WriteLine("\nDid you clean your club after?"); 
      mycleanclub.mycleanclub = Console.ReadLine(); 
      mycleanclub.clean(); 

      SteelClubs myScoreonHole = new SteelClubs(); 
      Console.WriteLine("\nWhat hole are you on?"); 
      myScoreonHole.myhole = Console.ReadLine(); 
      Console.WriteLine("What did you score on the hole?"); 
      myScoreonHole.myscore = Console.ReadLine(); 
      Console.WriteLine("What is the par of the hole?"); 
      myScoreonHole.parhole = Console.ReadLine(); 

      myScoreonHole.score(); 

      Console.ReadKey();  
     } 
    } 
} 
2

Usted interfaz de clase organizada de tal manera que los miembros del público comienzan con "mi". Por lo tanto, debe usar solo esos miembros.En lugar de

myScoreonHole.hole = Console.ReadLine(); 

debe escribir

myScoreonHole.myhole = Console.ReadLine(); 
0

La razón es que no se puede acceder a los datos miembro protegido a través de la instancia de la clase.

por lo que no se permite que se explica en este blog

Cuestiones relacionadas