es inaccesible debido a su nivel de protección

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.

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

Esta es la interfaz:

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

aquí está 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(); } } } 

En los Clubs tu clase base, los siguientes se declaran protected

  • club;
  • distancia;
  • Cleanclub;
  • puntuaciones;
  • par;
  • agujero;

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

En su código main , intenta acceder a estos fuera de la clase. p.ej:

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

Usted (de forma algo correcta) proporcionó acceso público a estas variables. p.ej:

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

lo que significa que su código principal podría cambiarse a

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

Dan, solo estás accediendo al campo protegido en lugar de a las propiedades.

Vea por ejemplo esta línea en su Main(...) :

myClub.distance = Console.ReadLine();

myClub.distance es el campo protegido, mientras que usted quería establecer la propiedad mydistance .

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

 myClub.distance = Console.ReadLine(); 

debiera ser

 myClub.mydistance = Console.ReadLine(); 

use sus propiedades públicas que haya definido para otros también en lugar de los miembros del campo protegido.

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

Usted organizó una interfaz de clase para que los miembros públicos comiencen con “mi”. Por lo tanto, debes usar solo esos miembros. En lugar de

 myScoreonHole.hole = Console.ReadLine(); 

Deberías escribir

 myScoreonHole.myhole = Console.ReadLine(); 

Debe usar las propiedades públicas de Main y no tratar de cambiar directamente las variables internas.

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

La razón por la que no está permitido se explica en este blog

Es porque no puede acceder a los datos de miembros protegidos a través de su instancia de clase. Debes corregir tu 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(); } } }