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显示了另一个以前没有显示过的类似错误,构建会将它们清除掉。