Ich habe scheinen in einen Fehler zu laufen, dass ich noch nie in vorher laufen:Warum ruft diese Listenmethode einen Unzugänglichkeitsfehler auf?
main.cs(9,48): error CS0122: `EratoPrimes.GeneratePrimes(int)' is inaccessible due to its protection level
main.cs(15,15): (Location of the symbol related to previous error)
Compilation failed: 1 error(s), 0 warnings
exit status 1
Hintergrund: Ich versuche, das Sieb des Eratosthenes in C# zu implementieren. Ich glaube, ich habe die Logik des Algorithmus ziemlich gut, und habe es mit einer Console.WriteLine()
Schleife über die Werte (ohne die Liste der Primzahlen) getestet.
Hier ist, was ich habe:
using System;
using System.Collections.Generic;
public class EratoSieve{
public static void Main(string[] args){
List<int> desired_primes = EratoPrimes.GeneratePrimes(100);
}
}
public class EratoPrimes{
List<int> GeneratePrimes(int limit){
// set up indexed array of candidates:
int[,] first_array = new int[limit,2];
for(int i=0; i<limit; i++){
first_array[i,0] = i;
first_array[i,1] = 1;
}
first_array[0,1] = 0;
first_array[1,1] = 0;
// set up list for primes:
List<int> primes = new List<int>(){2};
// begin Sieve:
for(int a=2; a < limit; a++){
if(first_array[a,1]==1){
primes.Add(first_array[a,0]);
for(int b = a*a; b < limit; b+=a){
first_array[b,1]=0;
}
}
}
/* test to see indexed array:
for(int k=0; k<limit; k++){
Console.WriteLine(first_array[k,0]+" "+first_array[k,1]);
}
*/
return primes;
}
}
Nun, wenn ich die GeneratePrimes
Methode in Main
zu nennen versuchen, mir wurde gesagt, dass EratoPrimes.GeneratePrimes(int) is inaccessible due to its protection level
. Warum ist das der Fall und wie kann ich das Programm korrigieren?
Danke. Nachdem ich ähnliche Fragen über SO nachgeschlagen hatte (bevor ich diese Frage gestellt habe), wusste ich, dass die Lösung etwas damit machen musste, die Methode öffentlich zu machen. Das brachte nur andere Probleme bei der Kompilierung, und erst als ich deine (und Ehsans) gelesen habe. Vorschlag, 'static' hinzuzufügen, dass es funktioniert hat. Ich werde Ihre Antwort wählen, da Sie erklärt haben, warum ich 'static' hinzufügen sollte. – daOnlyBG