Доступ к интерфейсам из классов, которые их не реализуют? - PullRequest
0 голосов
/ 22 октября 2009

У меня есть интерфейс, IFindable, который реализован несколькими классами. Еще один класс World содержит List<IFindable> items;

Я установил метод getItems в своем классе World, чтобы он возвращал список IFindables. Сейчас я пытаюсь получить доступ к этому списку из моего Default.aspx.cs класса (это веб-проект). К сожалению, я не могу этого сделать, так как этот класс не понимает, что такое IFindable. Я получаю следующую ошибку:

Inconsistent accessibility: return type
'System.Collections.Generic.List<IFindable>' is less accessible than
method 'World.getItems()'

Почему это? Я ошибся?

Ответы [ 4 ]

7 голосов
/ 22 октября 2009

Похоже, ваш IFindable интерфейс не является общедоступным, замените его на

public interface IFindable ...

Если ваша текущая декларация выглядит так

interface IFindable ...

Тогда компилятор использует доступность по умолчанию, которая является внутренней

Интерфейсы, такие как классы, могут быть объявлены как публичные или внутренние типы. В отличие от классов, интерфейсы по умолчанию для внутреннего доступа. Члены интерфейса всегда общедоступны, и модификаторы доступа не могут быть применены. http://msdn.microsoft.com/en-us/library/ms173121%28VS.80%29.aspx

2 голосов
/ 22 октября 2009

Другие предложили сделать ваш интерфейс общедоступным. Альтернатива - сделать ваш метод getItems() внутренним:

internal List<IFindable> getItems()
{
    ...
}

(Пока вы это делаете, я предлагаю вам либо сделать его GetItems(), либо свойство Items, чтобы следовать соглашениям .NET. getItems() очень похоже на Java.)

2 голосов
/ 22 октября 2009

Вы определили ваш интерфейс как общедоступный?

public interface IFindable 
{
...
}
0 голосов
/ 22 октября 2009

Вам также может понадобиться поместить оператор using в правильное пространство имен в верхней части файла вашего класса

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