c# - 为什么调用此列表方法会返回不可访问错误?

标签 c# list debugging methods compiler-errors

我似乎遇到了以前从未遇到过的错误:

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# 中实现 Eratosthenes 筛。我相信我已经很好地理解了算法的逻辑,并用 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;
    }
}

现在,当我尝试调用 GeneratePrimes Main 中的方法,有人告诉我EratoPrimes.GeneratePrimes(int) is inaccessible due to its protection level .为什么会这样,我该如何纠正程序?

最佳答案

默认情况下,没有显式访问修饰符的方法是私有(private)的,因此只能在其指定的类中访问。

如果你想按照你的定义使用它,你可以考虑用 public 来装饰它。访问修饰符和 static关键字:

public static List<int> GeneratePrimes(int limit){ ... }

这将执行以下操作:
  • public - public访问修饰符将允许在当前 EratosPrimes 之外访问您的方法类(class)。
  • static - static关键字将允许它不需要同一类的实例,因此像您当前使用的那样调用它 EratosPrimes.GeneratePrimes() .如果没有它,您将需要创建 EratosPrimes 的实例。上课,然后调用GeneratePrimes()该实例上的方法(即 new EratosPrimes().GeneratePrimes(42); )
  • 关于c# - 为什么调用此列表方法会返回不可访问错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41857530/

    相关文章:

    使用 javaScript 和 html 的 C# WebBrowser 控件

    c# - 如何处理传入的 protobuf 消息

    c++ - 在 C++ 中插入列表时没有匹配函数错误

    c++ - 如何在 QtCreator 的调试器中显示 std::multimap 和 std::multiset 的内容?

    javascript - 元素中生效的神秘属性

    c# - 如何在循环中调用正在运行的 Ranorex 测试?

    c# - 如何在 Xaml 值字段中设置自定义颜色值?

    python - 使用列表理解加入许多列表

    python - 将整数添加到 python 列表中的特定项目?

    debugging - 有没有人在 Visual Studio 中进行 TypeScript 调试?