2010-09-08 86 views
12

我有三个类。所有都是同一个命名空间的一部分。这里是三个类的基础知识。由于其保护级别,无法访问该类

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

and

'StubGenerator.PropGenerator.Method' 不可访问由于其保护水平

其是指在FBlock.cs以下行文件

public Method AddMethod(string aName) 

不一致的可访问性:返回类型'StubGenerator.PropGenerator.Method'比方法'StubGenerator.PropGenerator .FBlock.AddMethod(串)”

是指在FBlock.cs以下行文件

public Method AddMethod(string aName) 

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

任何想法?

编辑问。在文件中是否可以设置一些导致此问题的设置?

+1

如果您明确声明主类是公共的,它会改变什么吗? – Bobby 2010-09-08 13:21:21

+0

'Property'构造函数引用一个不存在的字段'pPropertyAttributes'。您明确没有发布产生您声明的错误的代码。 – Timwi 2010-09-08 13:28:09

+0

这是FBlock定义结束时缺少的复制粘贴错误吗?正如目前列出的,第一个名称空间声明未关闭。 – epotter 2010-09-08 13:29:05

回答

7

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

+3

是的,添加链接文件的选项在visual studio中隐藏得很好,如果有人搜索它,它在添加现有文件对话框中,添加按钮有一个小箭头将文件添加为链接而不是复制它。 – 2010-09-08 14:44:14

2

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

+2

不应该这是一个评论? – NullUserException 2010-09-08 14:41:17

+3

@NullUserException:我认为它,但就其本身而言,它实际上是对这个问题的回答:) – Timwi 2010-09-08 15:01:43

0

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

+0

如果是这样的话,编译器会在接口声明中抱怨它。 – Timwi 2010-09-08 13:23:05

+0

我知道,但正如您所表明的那样,给定的代码没有提供任何错误,所以显然在问题中省略了一些东西。就像我说的,只是一个(受过教育的)猜测。 – Bubblewrap 2010-09-08 13:24:07

+0

它不存在于FBlock实现的任何公共接口中。我已经包含了任何错误引用的所有代码。我没有包含所有的代码,因为它会造成一个非常长的问题。所有我上次编译后添加的代码都包含在问题中。 – scott 2010-09-08 13:44:31

2

所有的类都是internal默认

标志public没有做的伎俩。

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

+3

非嵌套类无法保护。它们默认为“内部”。 – Timwi 2010-09-08 13:22:30

+0

嘿,你是对的..今天学到了另一件事! – Arcturus 2010-09-08 13:27:17

+0

所有三个类都在同一个程序集中。所以他们不需要公开,对吧? – scott 2010-09-08 13:37:05

20

首先,尝试一个完整的重建。清理并构建(或者仅使用重建)。每过一段时间,我都会解决奇怪的构建问题。

接下来,注释掉您的示例中未包含的其他代码。编译。那样有用吗?

如果是这样,开始添加段,直到一个分段。

如果没有,请所有的类public,然后再试一次。

如果还是失败,也许尝试把下调类在同一个文件和重建。那时,访问问题绝对没有理由。如果仍然失败,拿起木工。

+2

令我惊讶的是,这(重建)为我工作。我想我已经停止期望增量构建搞砸了:( – Legolas 2015-07-25 14:36:34

2

也可能出现这样的情况:包含相关类的库没有用强名称正确签名。

4

尝试添加以下代码,您要使用

[Serializable()] 
public partial class Class 
{ 
0

嗨,您需要更改按钮属性从私人到公共类。 您可以更改下按钮>>属性>>设计>>修改器>>“公共” 一旦更改保护错误将消失。

Budi

相关问题