C# "unzugänglich ist aufgrund seiner Schutz-level" - Fehler im Konstruktor
Den Konstruktor der Kind-Klasse "caesar" gibt einen Fehler aus. Es besagt, dass der name, der Typ ist nicht verfügbar, aufgrund seiner Schutz-Ebene. Wie kommt das? Da dies eine Kind-Klasse abgeleitet von "Cipher" - Klasse sollte es nicht geben, eine Fehlermeldung. Wie Bewältige ich diese situation. Aber ich will die Variablen privat sein. Ich will nicht, Sie zu ändern, als öffentlich.
***Der zweite code-Beispiel funktioniert. Kann jemand einen Unterschied feststellen?
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;
}
}
}
----------------------------- Neu Bearbeiten ----------------
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! Du bist mit C#...verwenden die Eigenschaften anstelle von getter/setter-Methoden.
naming-Richtlinien vielleicht eine gute Lektüre für das Plakat zu. Der code sieht ganz Java-like. 😉
Ja eigentlich meine bevorzugte Sprache ist Java-also ich bin sehr an Sie gewöhnt. Als C# ist ähnlich zu Java, ich meine java proggramming Gewohnheiten in C# zu 😀 Aber ja, Sie sind eh richtig 🙂
naming-Richtlinien vielleicht eine gute Lektüre für das Plakat zu. Der code sieht ganz Java-like. 😉
Ja eigentlich meine bevorzugte Sprache ist Java-also ich bin sehr an Sie gewöhnt. Als C# ist ähnlich zu Java, ich meine java proggramming Gewohnheiten in C# zu 😀 Aber ja, Sie sind eh richtig 🙂
InformationsquelleAutor Alptugay | 2011-03-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es sieht aus wie Sie einen Fehler gemacht haben bei der Definition der Konstruktor der abgeleiteten Klasse. Wenn Sie möchten, zu bekommen
name
undtype
Werte der Oberklasse, Sie müssen geben Sie als zusätzliche Argumente im Konstruktor (für insgesamt 4 Argumente der Konstruktor der abgeleiteten Klasse.) Zum Beispiel, ändern Sie es, um das funktionieren sollte:Gibt es eine Reihe von anderen Strategien, die Sie nehmen könnte.
InformationsquelleAutor mpontillo
Das problem ist das
private
Felder name und Typ der Kind-Klasse kann nicht auf Sie zugreifen, es sei denn, Sie sind gekennzeichnet alsprotected
. Was Ihr wirklich wollen, ich vermute, istInformationsquelleAutor BrokenGlass
Private Mitglieder können nicht aufgerufen werden, die von abgeleiteten Klassen. protected und public können. Sie muss Sie geschützt werden. Auf diese Weise wird nur die Klasse und Ihre "Kinder" haben.
Zusammenfassung von Zugriffsrechten:
private:
kann nur zugegriffen werden, die von dieser Klasse Methoden, nichts anderesprotected:
zugegriffen werden kann, die von dieser Klasse und seine Kinder Methodeninternal:
zugegriffen werden kann nur von Methoden innerhalb der gleichen assemblyprotected internal:
gleiche wie interne + Methoden von abgeleiteten Klassen aus anderen Assemblyspublic:
kann durch jedermann abgerufen werdenInformationsquelleAutor Armen Tsirunyan
private
bedeutet, dass nur das deklarieren der Klasse kann auf die Mitglieder (was bedeutet, dass ererbte Typen nicht, entweder).protected
bedeutet, dass die Deklaration der Klasse und alle Nachkommen können Zugriff auf die Mitglieder, sondern Arten außerhalb dieser nicht.Auf einer anderen Anmerkung, getter-und setter-Funktionen sind in der Regel nicht verwendet .NET-Sprachen. Eigenschaften Kapseln diese Funktionalität und sind, was sollte stattdessen verwendet werden. Zum Beispiel;
InformationsquelleAutor Adam Robinson