由于保护级别,c#无法访问类

由于保护级别,c#无法访问类,c#,class,methods,C#,Class,Methods,嘿,伙计们,我是C#新手,我在练习类和方法之类的东西,我做了以下代码: using System; namespace ConsoleApp6 { class Book { static void Review() { int x = 10; Console.WriteLine(x); } } class Program { static vo

嘿,伙计们,我是C#新手,我在练习类和方法之类的东西,我做了以下代码:

using System;

namespace ConsoleApp6
{
    class Book
    {
        static void Review()
        {
            int x = 10;
            Console.WriteLine(x);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Book.Review);
        }
    }
}

这真的很简单,但当我运行它时,它说它无法访问“Review”方法,因为它的保护级别,请帮助此错误的原因是方法的默认访问修饰符是
private
,这意味着只有同一类的成员才能看到它们

由于要从同一命名空间中的另一个类引用该方法,因此需要通过将访问修饰符更改为
internal
(这意味着同一程序集中的任何类都可以看到它)或
public
(这意味着每个人都可以看到它)来提供对该方法更广泛的访问

以下任一项都可以解决您的问题:

// Only members of the same assembly can access this method
internal static void Review() { // code omitted }

// Everyone can access this method
public static void Review() { // code omitted }
您可以阅读有关访问修饰符的更多信息


此外,您已将
Review
的返回值设置为
void
,然后尝试将其传递到
控制台.WriteLine()
方法,该方法需要实际类型。这将导致编译错误(例如:“无法将
void
转换为
[someType]
”)

为了解决这个问题,您可以从main调用该方法,然后让该方法写入控制台:

private static void Main(string[] args)
{
    Book.Review();
}
或者,我的首选方法是让该方法返回一个字符串,然后将其写入
Main
方法中的控制台(我更喜欢这样做,因为它使该方法更通用-例如,有人可以调用它来检索评论,而不必将其显示到控制台):

请注意,在调用该方法时,需要在名称后包含括号:

private static void Main(string[] args)
{
    Console.WriteLine(Book.Review());
}

public static void Review()…
类成员的默认可访问性是
private
,这意味着只有类本身可以访问成员,这允许您隐藏实现细节等内容并促进封装除了使
Review()
公开之外,您还必须正确地调用它
Review()
无效,因此它不会返回任何内容,因此将其作为
Console.WriteLine()的参数传递将不起作用。您的
Main()
方法只需说:
Book.Review()代码还有另一个问题会导致它无法编译。可能还想加上这个,让OP解决这个问题。@maccettura很公平。我不确定,因为这不是问题的一部分,但我已经更新了答案。
private static void Main(string[] args)
{
    Console.WriteLine(Book.Review());
}