Inkonsistente accessibility: return type ist weniger zugreifbar als Methode C#
Ok, also das ist wirklich seltsam. Ich habe eine private member, und ich will es in Form2. Ich habe eine öffentliche statische Methode, so dass ich bekommen kann, dass die in Form2.
Hier ist mein code:
private static AppController appController;
private BreadRepository breadRep;
private CakeRepository cakeRep;
private SandwichRepository sandwichRep;
public Form1()
{
InitializeComponent();
breadRep = new BreadRepository();
cakeRep = new CakeRepository();
sandwichRep = new SandwichRepository();
appController = new AppController(breadRep , sandwichRep, cakeRep);
}
public static AppController getController()
{
return appController;
}
Ich habe versucht, den appController von Form1 public, aber ich bekomme auch mehr Fehler. Jetzt bekomme ich diese:
Inkonsistent accessibility: return type 'exemplu_map.controller.AppController "ist weniger zugreifbar als Methode" exemplu_map.Form1.getController()'
Irgendwelche Ideen ?
Update:
Hier ist mein AppController-Klasse:
class AppController
{
private BreadRepository breadRep;
private SandwichRepository sandwichRep;
private CakeRepository cakeRep;
public AppController(BreadRepository breadRep, SandwichRepository sandwichRep, CakeRepository cakeRep)
{
this.breadRep = breadRep;
this.sandwichRep = sandwichRep;
this.cakeRep = cakeRep;
}
public void writeToFile(String file)
{
StreamWriter wr = new StreamWriter(file);
String writeMe = "";
foreach(Bread e in breadRep.getAll())
{
writeMe = writeMe + e.getAll() + "\n";
}
foreach (Sandwich e in sandwichRep.getAll())
{
writeMe = writeMe + e.getAll() + "\n";
}
foreach (Cake e in cakeRep.getAll())
{
writeMe = writeMe + e.getAll() + "\n";
}
wr.Write(writeMe);
wr.Close();
}
}
Habe ich geändert AppController zu öffentlich, aber ich bekomme wieder mehr Fehler. Der gleiche Fehler, aber für breadRep, cakeRep, sandwichRep.
Sie brauchen, um Ihre AppController-Klasse der öffentlichkeit. Sie können nicht zurückkehren und eine interne Klasse von einer public-Methode, das wird snooker-code, der versucht, es zu nennen, da Sie nicht wirklich verwenden Sie das zurückgegebene Objekt.
InformationsquelleAutor icebox19 | 2014-02-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, wie @Selman22 erklärt, dass Ihre Methode
public
, während Ihr Rückgabewert istinternal
. (Klassen sindinternal
) eingestellt werden.Wenn beide
public
oderinternal
, sollte alles funktionieren.Machen Klasse
public
schien schwierig zu sein, die durch Abhängigkeiten zu anderen Klassen. Darüber hinaus könnte es werden nicht die besten, da Sie standardmäßig ist es besser, die Dinge weniger zugänglich.Machen die Methode
internal
löst das gleiche problem aus einem anderen Ende.Sowieso, @Selman22 war erste :). Ich habe gerade meine zwei cents, so sollten Sie vielleicht akzeptieren, seine Antwort :).
InformationsquelleAutor AlexD
Barrierefreiheit wird ermittelt, indem der access-Ebene gegeben, um einen Typ oder member. Es ist wichtig zu beachten, dass die Standard-Zugriffsebene ist für verschiedene Typen/Typ Mitglieder
Die Standard-Zugriffsebene für die Typen ist internen
Die Standard-Zugriffsstufe für Mitglieder ist private
Es ist auch wichtig zu beachten, dass private ist nicht anwendbar auf Arten (wie kann man konstruieren Sie eine Typ, wenn es privat ist - es könnte immer nur Konstrukt selbst), es sei denn, der Typ ist in einem anderen verschachtelten Typ
Weiß, es ist leicht zu sehen, warum würden Sie Fehler in der Erstellung der Arten der öffentlichkeit. Bei der Herstellung einer Art öffentlichkeit, die Sie öffnen, bis die assembly verwiesen werden, die von anderen Baugruppen, das heißt, Sie können sehen Sie sich die Arten innerhalb.
Wenn Ihr Typen, die als public deklariert sind, und Sie haben einen öffentlichen Konstruktor, dann ist es zu erwarten, dass Ihre öffentliche Konstruktor aufgerufen werden können, von einem externen Montage. Es ist wegen dieses, daß alle Arten, die dem Konstruktor oder einer anderen öffentlichen member eines Typs in der Baugruppe muss die öffentliche Zugänglichkeit.
Ich schweife ab, aber das Problem ist mit den accessibility
Ihre statischen member
AppController
als privat gekennzeichnet was bedeutet, es kann nur gesehen werden, durch dieForm1
Klasse (ich gehe davon aus, dass die Klasse in der es sich befindet)Die Lösung (wie von Alex D) könnte es sein, dass das Mitglied internen statt private. Dies bedeutet, dass dem Mitglied gesehen werden kann, der alle Arten in der gleichen Versammlung. private ist nur sichtbar, um der Typ, der erklärt das Mitglied
Wenn Sie es machen zu zugänglich (öffentlichen) erhalten Sie den Fehler, wie oben gezeigt. internen hält das Innenleben in Ihrer Montage, so dass Sie nicht bekommen, diese Fragen der Zugänglichkeit.
Ja stimmt AlexD, ich sollte wohl update!
InformationsquelleAutor Charleh