2010-09-08 90 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

相關問題