c# - que - Es inaccesible debido a su nivel de protección.
datagridview no es accesible debido a su nivel de proteccion (8)
Dan, es solo que 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 quiso establecer la propiedad mydistance .
Solo te estoy dando una pista, ¡no voy a corregir tu código, ya que esta es la tarea! ;)
No puedo entender esto. El problema es que la distancia, el club, el club limpio, el hoyo, el puntaje y el par todos parecen inaccesibles debido al nivel de protección y no sé por qué porque pensé que 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();
}
}
}
Debe utilizar las propiedades públicas de Main
y no intentar cambiar directamente las variables internas.
En su clase de base los siguientes Clubs
están declarados protected
- club;
- distancia;
- club limpio
- puntuaciones;
- par;
- agujero;
lo que significa que solo se puede acceder a ellos por la propia clase o cualquier clase que se derive de los Clubs
.
En su código main
, intenta acceder a estos fuera de la propia clase. p.ej:
Console.WriteLine("How far to the hole?");
myClub.distance = Console.ReadLine();
Ha proporcionado (de forma correcta) accesores públicos a estas variables. p.ej:
public string mydistance
{
get
{
return distance;
}
set
{
distance = value;
}
}
lo que significa que su código principal podría ser cambiado a
Console.WriteLine("How far to the hole?");
myClub.mydistance = Console.ReadLine();
En su método Principal, intenta acceder, por ejemplo, al club
(que está protegido), cuando debería acceder a myclub
que es la propiedad pública que creó.
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();
}
}
}
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 cual no está permitido se explica en este blog
Usted organizó la interfaz de clase de modo que los miembros públicos comienzan con "mi". Por lo tanto, debe utilizar sólo esos miembros. En lugar de
myScoreonHole.hole = Console.ReadLine();
Deberías escribir
myScoreonHole.myhole = Console.ReadLine();
myClub.distance = Console.ReadLine();
debiera ser
myClub.mydistance = Console.ReadLine();
use las propiedades públicas que ha definido para otros también en lugar de los miembros del campo protegido.