C# “est inaccessible en raison de son niveau de protection” erreur dans le constructeur
Le constructeur de la classe fille "césar" donne une erreur. Il est dit que le nom, le type est inaccessible en raison de son niveau de protection. Comment venir? Comme c'est un enfant de la classe dérivée de "Chiffre" de la classe, il ne devrait pas donner une erreur de ce genre. Comment puis-je remédier à cette situation. Mais je veux que ceux des variables privées. Je ne veux pas les changer au public.
***Le deuxième exemple de code qui fonctionne. Quelqu'un peut-il voir une différence?
namespace Encrypter
{
class Cipher
{
public Cipher(string name, string type)
{
setName(name);
setType(type);
}
private string name;
private string type;
public void setName(string newName)
{
name = newName;
}
public string getName()
{
return name;
}
public void setType(string newType)
{
type = newType;
}
public string getType()
{
return type;
}
public string encrypt(string text)
{
return text;
}
public string decrypt(string text)
{
return text;
}
}
}
namespace Encrypter
{
class Caesar : Cipher
{
private int shiftamount;
private string shiftdirection;
public Caesar(int shiftamount, string shiftdirection) : base(name, type)
{
setShiftamount(shiftamount);
setShiftdirection(shiftdirection);
}
public void setShiftamount(int newShiftamount)
{
shiftamount = newShiftamount;
}
public int getShiftamount()
{
return shiftamount;
}
public void setShiftdirection(string newShiftdirection)
{
shiftdirection = newShiftdirection;
}
public string getShiftdirection()
{
return shiftdirection;
}
}
}
----------------------------- Nouvelle Édition ----------------
class MyFile
{
public MyFile(int id, string name, int size, string type)
{
setId(id);
setName(name);
setSize(size);
setType(type);
}
private int id;
private string name;
private string type;
private int size;
class Movie : MyFile
{
private string director;
private int release_year;
public Movie(string director, int release_year, int id, string name, int size) : base( id, name, size, "m")
{
setDirector(director);
setRelease_year(release_year);
}
- Gah! Vous êtes à l'aide de C#...utiliser les Propriétés au lieu de getter/setter.
- Le intitulé peut-être une bonne lecture pour le poster aussi. Le code est très Java-like. 😉
- Ouais en fait ma préférée de la langue est en Java donc je suis très utilisé. Que C# est similaire à Java, j'utilise mon java proggramming habitudes en C# aussi 😀 Mais oui vous avez raison, de toute façon 🙂
Vous devez vous connecter pour publier un commentaire.
Il semble que vous avez fait une erreur dans la définition du constructeur de la classe dérivée. Si vous souhaitez obtenir
name
ettype
valeurs de la super-classe, vous devrez le passer en tant que supplémentaire des arguments du constructeur (pour un total de 4 arguments dans le constructeur de classe dérivée.) Par exemple, en changeant de travail:Il y a un certain nombre d'autres stratégies que vous pouvez prendre.
Le problème est le
private
champs nom et le type de la classe enfant ne peut pas y accéder, sauf s'ils sont marqués commeprotected
. Ce que vos voulez vraiment que je soupçonne estMembres privés ne sont pas accessibles depuis les classes dérivées. protégé et public peuvent. Vous devez faire de leur protection. De cette façon, seule la classe et de ses "enfants" ont accès.
Résumé de droits d'accès:
private:
peut être accessible uniquement à partir de méthodes de la classe, rien d'autreprotected:
peut être consulté à partir de la classe et de ses enfants méthodesinternal:
peuvent être accessibles qu'à partir de méthodes au sein de la même assembléeprotected internal:
même interne + méthodes des classes dérivées à partir d'autres assembléespublic:
peuvent être consultées par tout le mondeprivate
signifie que seulement la classe de déclaration peut accéder aux membres (ce qui signifie que héritée types de ne peut pas, non plus).protected
signifie que la classe de déclaration et de tous les descendants peuvent accéder à la membres de, mais les types en dehors de celles qui ne le peuvent pas.Sur une note différente, de lecture et de définition des fonctions sont généralement pas utilisés .NET languages. Propriétés de saisir cette fonctionnalité et sont ce qui devrait être utilisé à la place. Par exemple;