15

私は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 クラスを公開しても問題が解決しない理由がわかりません。

何か案は?

質問するように編集しました。これを引き起こすファイルの設定はありますか?

4

9 に答える 9

21

まず、完全な再構築を試みます。クリーンアップしてビルドします (または単に再ビルドを使用します)。時々、奇妙なビルドの問題が解決されます。

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

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

そうでない場合は、すべてのクラスpublicを作成してからやり直してください。

それでも失敗する場合は、削除したクラスを同じファイルに入れて再構築してみてください。その時点で、アクセスの問題が発生する理由はまったくありません。それでもだめなら、大工仕事を始めましょう。

于 2010-09-08T14:19:28.957 に答える
7

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

于 2010-09-08T14:37:24.743 に答える
4

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

[Serializable()]
public partial class Class
{
于 2013-04-11T23:49:05.887 に答える
3

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

于 2010-09-12T02:40:09.467 に答える
2

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

于 2010-09-08T13:21:24.343 に答える
2

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

マーキングpublicはうまくいきませんでした。

Method という名前の 2 つのクラスがなく、間違った Method クラスが含まれている可能性がありますか?

于 2010-09-08T13:22:04.267 に答える
0

FBlockpublic Method AddMethod(string aName)が実装するパブリック インターフェイスで定義されていると思います。そのインターフェイスのコンシューマーが Method にアクセスできるとは限りません。

于 2010-09-08T13:21:40.277 に答える