общедоступная переменная недоступна - PullRequest
0 голосов
/ 27 февраля 2011

В одном пространстве имен (Ventosa.Graphics) у меня есть публичный класс с именем Model

namespace Ventosa.Graphics
{
   public class Model : GraphicsResource
   {
       public Model(...)
       {
           ...
       }
       ...
   }
}

Затем в другом проекте я пытаюсь получить доступ к этому классу

Model player = new Model(...);

Но эта строка создает ошибку. C # признает, что Модель существует, но утверждает, что она недоступна из-за уровня защиты. Разве обнародование не должно означать, что это доступно отовсюду?

И да, базовый класс GraphicsResource является общедоступным.

Это происходит и в некоторых других местах моего проекта, все с классами, которые являются производными.

EDIT: Точное сообщение об ошибке (на немецком языке): Der Zugriff auf "Ventosa.Graphics.Model" ist aufgrund der Sicherheitsebene nicht möglich. В переводе на английский он говорит: "Ventosa.Graphics.Model" недоступен из-за уровня защиты.

Ответы [ 2 ]

2 голосов
/ 27 февраля 2011

Вы описываете то, чего явно не должно быть. Я бы посоветовал вам попытаться воспроизвести проблему самым простым способом. Вы, вероятно, не сможете. Затем добавьте к своему образцу, делая его все более похожим на ваш производственный код, пока не возникнет проблема.

Удалить ссылку на суперкласс GraphicResource. Убедитесь, что определен только один конструктор. Попробуйте создать экземпляр этого класса из того же пространства имен, используя полные ссылки на пространство имен ( not using операторы) и этот единственный явный конструктор. Это, вероятно, сработает.

Если это не работает, отступите немного назад и определите новый тип целиком (Ventosa.Graphics.ModelTest или что-то в этом роде). Убедитесь, что работает .

Теперь добавьте кусочки обратно. Унаследуйте от GraphicResource, попробуйте это. Удалить квалификацию пространства имен; используйте вместо этого using. Переместите экземпляр в другое пространство имен, а затем в другую сборку.

Вы убедились, что определение класса GraphicResource является открытым. Как насчет любого из его суперклассов?

0 голосов
/ 27 февраля 2011

Я знаю, что это может звучать глупо, но вы пытались перезапустить Visual Studio (после очистки и перестройки решения)?Я заметил странное поведение, особенно если у вас включено Code-Coverage и установлено несколько Powertools для Visual Studio.

Была ли модель внутренней в некоторых предыдущих сборках?Это действительно распространенное имя.

Редактировать. Чтобы убедиться, что у вас действительно правильный тип, вы можете навести объявление «Модель» во втором проекте и нажать F12 (или щелкнуть правой кнопкой мыши и выбрать «Перейти к определению», незнаю немецкий термин прямо сейчас).Это должно привести вас к вашему классу или к определению некоторого другого «Model» -класса (также отображаются внутренние типы .NET).

...