Класс недоступен из-за уровня защиты

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

//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.Пропгенератор.Метод " недоступен из-за его уровня защиты

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

private List<Method> pMethods;

и

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

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

 public Method AddMethod(string aName)

и

несогласованная доступность: тип возврата ' StubGenerator.Пропгенератор.Метод "менее доступен, чем метод" StubGenerator.Пропгенератор.FBlock.AddMethod(строка)'

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

 public Method AddMethod(string aName)

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

какие идеи?

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

8 ответов


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

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

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

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

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


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


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

[Serializable()]
public partial class Class
{

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


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


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

обозначение public не сделал трюк.

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


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


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

буди