Как мне обойти Inconsistant ошибку accessibilty в C #? - PullRequest
0 голосов
/ 29 апреля 2010

Как мне обойти ошибку Inconsistant accessibilty в C #?

Мне нужно передать указатель на узел в связанном списке для метода. Когда я это делаю, я получаю «Ошибка компилятора CS0051»

Пример Следующий пример генерирует CS0051:

// CS0051.cs
public class A
{
  // Try making B public since F is public
  // B is implicitly private here
  class B
  {
  }

  public static void F(B b)  // CS0051
  {
  }

  public static void Main()
  {
  }
}

Это простой пример. Реальная программа немного сложнее. Я на самом деле использую узел в связанном списке, чтобы перейти к методу Узел LinkedListNode

Метод использует рекурсию, потому что узел представляет собой огромную структуру связанных списков связанных списков, которая выводит файл XML. Либо мне нужно найти способ использовать рекурсию без использования методов, либо мне нужно найти способ передавать указатели на узлы или действительные узлы.

Ответы [ 3 ]

4 голосов
/ 29 апреля 2010

Вы не можете иметь параметр, определенный как значение public меньше общедоступного метода.

В приведенном выше примере B должен быть публичным, если вы хотите использовать его в публичном методе F.

0 голосов
/ 29 апреля 2010

Если вы думаете о пользователе класса A, ему будет предложен открытый интерфейс, который включает void F(B b). Логично, что этому пользователю должно быть разрешено создавать экземпляр B, иначе метод F будет непригодным для использования.

0 голосов
/ 29 апреля 2010

Единственный способ «обойти» это заставить метод принять базовый тип, открытый как параметр, вместо B. Вы можете использовать object, если нет другого базового типа. Это полезно только в том случае, если у вас есть открытый метод, который возвращает внутренний тип, который впоследствии необходимо передать обратно в ваш код, и, как правило, это не очень хороший дизайн. (Конечно, возвращающий метод также должен был бы возвращать открытый тип.)

В противном случае вам просто нужно сделать B общедоступным типом, чтобы он работал. Ваш код говорит прямо сейчас: любой может вызвать этот метод, но только классы в этой сборке могут получить доступ к параметру типа . Конечно, если они не могут получить доступ к типу параметра, они не могут вызвать метод - это то, что говорит вам компилятор C #.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...