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

时间:2018-05-15 17:10:44

标签: c# class methods

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

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

1 个答案:

答案 0 :(得分:4)

此错误的原因是方法的默认访问修饰符为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 }

您可以阅读有关访问修饰符here的更多信息。

此外,您已将Review的返回值设置为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());
}