web-dev-qa-db-ja.com

クラスは保護レベルのためアクセスできません

3つのクラスがあります。すべてが同じ名前空間の一部です。ここに3つのクラスの基本があります。

//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をpublicにしても、エラーは解決されません。 Propertyクラスを呼び出したときにエラーが発生しない理由がわかりません。そして、なぜMethodクラスをpublicにしても問題が解決しないのか理解できません。

何か案は?

尋ねるために編集しました。これを引き起こすファイルの設定がありますか?

14
scott

リンクされたファイルを使用するプロジェクトがありました。 FBlock.csファイルがあったため、リンクされたファイルとしてmethod.csファイルをそのプロジェクトに追加する必要がありました。リンクされたファイルについて聞いたことがありません。それが可能であることすら知りませんでした。

7
scott

まず、完全な再構築を試してください。クリーンアップしてビルドします(または単に再ビルドを使用します)。長い間、それは私にとって奇妙なビルドの問題を解決します。

次に、投稿したサンプルに含まれていない残りのコードをコメントアウトします。コンパイル。それは動作しますか?

その場合、セグメントが壊れるまでセグメントの追加を開始します。

そうでない場合は、すべてのクラスをpublicにして、再試行してください。

それでも失敗する場合は、トリミングしたクラスを同じファイルに入れて再構築してみてください。その時点では、アクセスの問題の理由はまったくありません。それでもうまくいかない場合は、大工仕事をしてください。

21
Andy_Vulhop

使用するクラスに以下のコードを追加してみてください

[Serializable()]
public partial class Class
{
4
Gabriela

また、問題のクラスを含むライブラリが厳密な名前で適切に署名されていない場合もあります。

3
Alexey

投稿したコードは、引用したエラーメッセージを生成しません。問題を実際に示す(小さな)例を提供する必要があります。

2
Timwi

すべてのクラスはデフォルトでinternalです

publicをマークしてもトリックは行われませんでした。

Methodという名前のクラスが2つなく、おそらく間違ったMethodクラスが含まれていると思いますか?

2
Arcturus

public Method AddMethod(string aName)はFBlockが実装するパブリックインターフェイスで定義されていると思います。そのインターフェイスのコンシューマーは、メソッドへのアクセスを保証されていません。

0
Bubblewrap

こんにちはボタンのプロパティをプライベートからパブリックに変更する必要があります。 [保護]ボタンを変更すると、[保護]エラーが表示されなくなります。

ブディ

0
Budi