C# 类由于其保护级别而不可访问

C# 类由于其保护级别而不可访问,c#,access-modifiers,C#,Access Modifiers,我有三节课。它们都是同一命名空间的一部分。以下是这三门课的基础知识 //FBlock.cs namespace StubGenerator.PropGenerator { class FBlock : IDesignRegionInserts, IFormRegionInserts, IAPIRegionInserts, IConfigurationInserts, ISoapProxyClientInserts, ISoapProxyServiceInserts {

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

//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”比方法“StubGenerator.PropGenerator.FBlock.AddMethod(string)”更难访问

它引用FBlock.cs文件中的以下行

private List<Method> pMethods;
 public Method AddMethod(string aName)
 public Method AddMethod(string aName)
将类方法公开不会解决错误。我不明白为什么调用属性类时没有得到错误。我不明白为什么公开方法类不能解决问题

有什么想法吗


编辑以提问。文件中是否存在导致此问题的设置?

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

我猜
公共方法AddMethod(string aName)
是在FBlock实现的公共接口上定义的。不保证该接口的使用者能够访问该方法。

默认情况下,您的所有类都是
内部类

标记
public
并没有奏效


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

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

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

如果是这样,开始向后添加线段,直到有人将其打断

如果没有,请将所有类
公开
,然后重试


如果仍然失败,可以尝试将修剪过的类放在同一个文件中并重新构建。在这一点上,绝对没有理由出现访问问题。如果还是不行,那就做木工吧

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

也可能是包含所讨论类的库没有使用强名称正确签名。

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

[Serializable()]
public partial class Class
{

您好,您需要将按钮属性从私有更改为公共。 您可以在按钮>>属性>>设计>>修改器>>“公共”下进行更改 一旦更改,保护错误将消失


你的课应该是公开的


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

如果将主类显式声明为公共类,它会改变什么吗?
属性
构造函数引用一个不存在的字段。您显然没有发布产生您声明的错误的代码。FBlock定义末尾缺少}是复制粘贴错误吗?如当前所列,第一个命名空间声明未关闭。timwi,属性类中没有错误。我之所以包含它,是因为FBlock类中的addProperty方法不会导致任何错误,而且据我所知,它与method类具有相同的访问级别。我从那门课上删掉了很多内容,因为它很长,没有给问题增加任何内容。如果你认为有帮助的话,我可以完整地添加它。epotter,复制粘贴错误是从复制到问题。我删掉了很多FBlock类,因为它很长,与问题无关。非嵌套类无法保护。默认情况下,它们是
内部的
。所有三个类都在同一个程序集中。所以他们不需要公开,对吧?没错。这是一个奇怪的问题,正如一些人所说,我也无法重现它,因此我认为问题出在其他地方。我只是搜索了整个解决方案,只有一个方法类,当我将鼠标悬停在声明上时,它会显示正确的命名空间。如果是这样,编译器会在接口声明中抱怨它。我知道,但正如您所指出的,给定的代码没有错误,因此问题中显然遗漏了一些内容。就像我说的,只是一个(有根据的)猜测。它不存在于FBlock实现的任何公共接口中。我已经包含了所有错误引用的代码。我没有包括所有的代码,因为这将是一个非常非常长的问题。自上次编译以来我添加的所有代码都包含在问题中。是的,添加链接文件的选项在visual studio中隐藏得很好。如果有人搜索它,它位于“添加现有文件”对话框中,“添加”按钮上有一个小箭头,用于将文件添加为链接,而不是复制它。@NullUserException:我考虑过它,但就目前情况而言,它实际上是对以下问题的回答:)令我惊讶的是,这个(重建)对我有效。我想我已经不再期望增量构建会一团糟了:(谢谢你…Clean显示了另一个以前没有显示过的类似错误,构建会将它们清除掉。