由于其保护级别,类无法访问

时间:2010-09-08 13:15:36

标签: c# access-modifiers

我有三节课。 all都是同一命名空间的一部分。以下是这三个类的基础知识。

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

使类Method公开不解决错误。我无法弄清楚为什么我在调用Property类时没有得到错误。我不明白为什么将Method类设为public并不能解决问题。

有什么想法吗?

编辑问。可能会在文件上设置一些导致此问题的设置吗?

9 个答案:

答案 0 :(得分:21)

首先,尝试完全重建。清理和构建(或仅使用重建)。每隔一段时间,我就会为我解决奇怪的构建问题。

接下来,注释掉您发布的示例中没有的其余代码。编译。那样有用吗?

如果是这样,请开始添加片段,直到有人将其分解为止。

如果没有,请创建所有课程public并重试。

如果仍然失败,可以尝试将修剪后的类放在同一个文件中并重建。那时,绝对没有理由存在访问问题。如果仍然失败,请从事木工。

答案 1 :(得分:7)

有一个项目使用了链接文件。我需要将method.cs文件作为链接文件添加到该项目中,因为FBlock.cs文件就在那里。我以前从未听说过链接文件,我甚至都不知道这是可能的。

答案 2 :(得分:4)

尝试将以下代码添加到您要使用的类

[Serializable()]
public partial class Class
{

答案 3 :(得分:3)

也可能是包含相关类的库未使用强名称正确签名。

答案 4 :(得分:2)

您发布的代码不会生成您引用的错误消息。您应该提供一个实际表现出问题的(小)示例。

答案 5 :(得分:2)

默认情况下,您的所有课程均为internal

标记public没有做到这一点。

您确定没有两个名为Method的类,并且可能包含错误的Method类吗?

答案 6 :(得分:0)

我猜测public Method AddMethod(string aName)是在FBlock实现的公共接口上定义的。该接口的消费者无法保证能够访问Method。

答案 7 :(得分:0)

您好需要将Button属性从private更改为public。 您可以更改Under Button&gt;&gt;属性&gt;&gt;设计&gt;&gt;修饰语&gt;&gt; “上市” 一旦更改,保护错误就会消失。

布迪

答案 8 :(得分:0)

您的课程应该是公开的

公共类FBlock:IDesignRegionInserts,IFormRegionInserts,IAPIRegionInserts,IConfigurationInserts,ISoapProxyClientInserts,ISoapProxyServiceInserts