gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:49:47 26 4
gpt4 key购买 nike

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

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/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com