Класс недоступен из-за уровня защиты - PullRequest
14 голосов
/ 08 сентября 2010

У меня есть три класса.все являются частью одного и того же пространства имен.Вот основы трех классов.

//FBlock.cs
namespace StubGenerator.PropGenerator
{
    class FBlock : IDesignRegionInserts, IFormRegionInserts, IAPIRegionInserts,  IConfigurationInserts, ISoapProxyClientInserts, ISoapProxyServiceInserts
    {
        private List<Property> pProperties;
        private List<Method> pMethods;
        public FBlock(string aFBlockName)
        { 
            pProperties = new List<Property>();
            pMethods = new List<Method>();
        }

        public Property AddProperty(string aName)
        {
            Property loProp = new Property(this, aName, pProperties.Count);
            pProperties.Add(loProp);
            return loProp;
         }

         public Method AddMethod(string aName)
         {
             Method loMeth = new Method(this, aName);
             pMethods.Add(loMeth);
             return loMeth;
         }
     }

 //Method.cs
 namespace StubGenerator.PropGenerator
 {
     class Method : IPropertyName
     {
         private List<StubGenerator.PropGenerator.PropertyAttribute> pPropertyAttributes;
         private string pName;
         private string pFBlockName;

         public Method(FBlock aFBlock,string aName)
         {
             pPropertyAttributes = new List<PropertyAttribute>();
             pName = aName;
             pFBlockName = aFBlock.Name;
         }
      }
 }

 //Property.cs
 namespace StubGenerator.PropGenerator
 {
    class Property : StubGenerator.PropGenerator.IPropertyName, StubGenerator.PropGenerator.IDesignRegionInserts, StubGenerator.PropGenerator.IFormRegionInserts, IAPIRegionInserts, IConfigurationInserts, ISoapProxyClientInserts, ISoapProxyServiceInserts
    {
        private string pName;
        private string pExpandedName;
        private string pFBlockInitials;

        private Group pPropertyGroup;
        private FlowLayoutPanel pGroupFlowPanel;
        private Button pUpdateButton;
        private CheckBox pShowProperty;


         private string pFBlockName;


         public Property(FBlock aFBlock, string aName, int aIndex)
         {
             pPropertyAttributes = new List<PropertyAttribute>();
             pFBlockName = aFBlock.FBlockName;

             ExpandName();
             GetInitials();

             pShowProperty = new CheckBox(this, 10, (aIndex + 1) * 20, aIndex);
             pPropertyGroup = new Group(this);
             pGroupFlowPanel = new FlowLayoutPanel(this);

             pUpdateButton = new Button(this, 10, 18, aIndex);
         }
     }
}

Я получаю следующие ошибки

«StubGenerator.PropGenerator.Method» недоступен из-за уровня защиты

, которая ссылается на следующую строку в файле FBlock.cs

private List<Method> pMethods;

и

'StubGenerator.PropGenerator.Method' недоступна из-за ееуровень защиты

, который ссылается на следующую строку в файле FBlock.cs

 public Method AddMethod(string aName)

и

Несогласованная доступность: тип возврата StubGenerator.PropGenerator.Method 'менее доступен, чем метод' StubGenerator.PropGenerator.FBlock.AddMethod (string) '

, который ссылается на следующую строку в файле FBlock.cs

 public Method AddMethod(string aName)

сделав метод класса общедоступным, ошибки не устраняются.Я не могу понять, почему я не получаю ошибки при вызове класса Property.И я не понимаю, почему обнародование класса Method не решает проблему.

Есть идеи?

Отредактировано, чтобы спросить.может быть какая-то настройка в файле, которая вызывает это?

Ответы [ 8 ]

21 голосов
/ 08 сентября 2010

Во-первых, попробуйте полную перестройку. Очистить и собрать (или просто использовать перестроить). Время от времени это решает причудливые проблемы со сборкой для меня.

Далее, закомментируйте оставшуюся часть кода, которого нет в вашем примере, который вы опубликовали. Компиляция. Это работает?

Если это так, начните добавлять сегменты обратно, пока один не сломает их.

Если нет, сделайте все классы public и попробуйте снова.

Если это по-прежнему не удается, возможно, попробуйте поместить урезанные классы в тот же файл и перестроить. На этом этапе не было бы абсолютно никаких причин для проблем с доступом. Если это все еще не удается, заняться столярным делом.

7 голосов
/ 08 сентября 2010

Был проект, который использовал связанные файлы. Мне нужно было добавить файл method.cs в этот проект также как связанный файл, так как там был файл FBlock.cs. Я никогда не слышал о связанных файлах раньше, я даже не знал, что это возможно.

4 голосов
/ 12 апреля 2013

Попробуйте добавить приведенный ниже код в класс, который вы хотите использовать

[Serializable()]
public partial class Class
{
3 голосов
/ 12 сентября 2010

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

2 голосов
/ 08 сентября 2010

Все ваши классы internal по умолчанию

Маркировка public не сработала.

Вы уверены, что у вас нет двух классов с именем Method, и, возможно, вы используете неправильный класс Method?

2 голосов
/ 08 сентября 2010

Код, который вы разместили, не приводит к сообщениям об ошибках, которые вы цитировали. Вы должны предоставить (маленький) пример, который действительно показывает проблему.

0 голосов
/ 17 июля 2017

Привет Вам нужно изменить свойства кнопки с частного на публичный. Вы можете изменить Под кнопкой >> свойства >> Дизайн >> Модификаторы >> «публичный» При изменении защиты ошибка исчезнет.

Буди

0 голосов
/ 08 сентября 2010

Полагаю, public Method AddMethod(string aName) определено в общедоступном интерфейсе, который реализует FBlock. Потребителям этого интерфейса не гарантируется доступ к Method.

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