私は前に実行したことがないエラーに遭遇しているように見えるしました:このリストメソッドを呼び出して、アクセスできないエラーが返されるのはなぜですか?
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
背景:私はC#でエラトステネスのふるいを実装しようとしています。私はアルゴリズムのロジックがかなり良くなっていると思っており、値の上にConsole.WriteLine()
ループ(素数のリストを返さずに)を使ってテストしました。ここで
は私が持っているものです。
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;
}
}
さて、私はMain
でGeneratePrimes
メソッドを呼び出すようにしようとしたとき、私は聞いていEratoPrimes.GeneratePrimes(int) is inaccessible due to its protection level
います。なぜこれが当てはまるのですか?プログラムを修正するにはどうしたらいいですか?
ありがとうございました。 (この質問をする前に)SOの同様の問題を調べたところ、この方法を「公開」して何かをしなければならないことが分かっていました。それはちょうど他の編集問題を返しました。それが働いた「静的」を加える提案。なぜ私は '静的'を追加すべきかを説明したので、私はあなたの答えを選びます。 – daOnlyBG