Подтвердить что ты не робот

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

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

//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)

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

Любые идеи?

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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

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

Ответ 3

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

[Serializable()]
public partial class Class
{

Ответ 4

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

Ответ 5

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

Маркировка public не выполняла трюк.

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

Буди