c # не может получить доступ к классу из-за уровня защиты - PullRequest
0 голосов
/ 15 мая 2018

Эй, ребята, я новичок в 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 голосов
/ 15 мая 2018

Причина этой ошибки в том, что модификатор доступа по умолчанию для методов 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, а затем пытаетесь передать его в метод 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());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...