首页 > 解决方案 > c# 由于保护级别无法访问类

问题描述

嘿伙计们,我是 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);
        }
    }
}

这真的很简单,但是当我运行它时说它无法访问“审查”方法,因为它的保护级别,请帮助

标签: c#classmethods

解决方案


这个错误的原因是方法的默认访问修饰符是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此外,您已设置to的返回值,void然后尝试将其传递给Console.WriteLine()需要实际类型的方法。这将导致编译错误(类似于:“无法转换void[someType]”)。

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

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

或者,我的偏好是让方法返回一个字符串,然后将其写入Main方法中的控制台(我更喜欢这样,因为它使方法更加通用 - 有人可以调用它来简单地检索评论而不将其显示给控制台,例如):

public static string Review()
{
    int x = 10;
    return x.ToString();
}

请注意,当您调用该方法时,您需要在名称后加上括号:

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

推荐阅读