web-dev-qa-db-ja.com

一貫性のないアクセシビリティ:パラメータタイプはメソッドよりもアクセスしにくい

私は2つのフォームの間にオブジェクト(基本的には現在ログオンしているユーザーへの参照)を渡します。現時点で、私はログインフォームでこれらの行に沿って何かをしています:

private ACTInterface oActInterface;

public void button1_Click(object sender, EventArgs e)
    {
        oActInterface = new ACTInterface(@"\\actserver\Database\Premier.pad",this.textUser.Text,this.textPass.Text);

        if (oActInterface.checkLoggedIn())
        {
            //user has authed against ACT, so we can carry on
            clients oClientForm = new clients(oActInterface);
            this.Hide();
            oClientForm.Show();
        }
        else...

次のフォーム(クライアント)では、私は持っています:

public partial class clients : Form
{
    private ACTInterface oActInt {get; set;}

    public clients(ACTInterface _oActInt)

...これは次のようになります。

Error   1   Inconsistent accessibility: 
parameter type 'support.ACTInterface' is less accessible than method    
'support.clients.clients(support.ACTInterface)'  
c:\work\net\backup\support\support\clients.cs   20  16  support

私は問題が何であるかを私は本当に理解していません - 両方のフィールドはプライベートであり、そしてフォームから関連するパブリックメソッドによってアクセスされます。グーグルはそれがただ一つの要素がパブリックであることと他のプライベートであることを指し示しているので、実際には役に立ちません。

誰か手伝ってくれる?

189
dodgrile

publicクラスclientsのコンストラクタはpublicですが、型ACTInterfaceのパラメータはprivateです(クラスにネストされていますか?)。それはできません。 ACTInterfaceを少なくともclientsと同じくらいアクセス可能にする必要があります。

289
jason

クラスを公開します。

class NewClass
{

}

と同じです。

internal class NewClass
{

}

だからクラスはパブリックでなければなりません

61
Nisha

ACTInterface型のように聞こえる場合はpublicではありませんが、internal(最上位の場合)またはprivate(別の型にネストされている場合)のデフォルトのアクセシビリティを使用しています。

型をpublic修飾子にすることで修正されます。

別の方法は、型とメソッドの両方をinternalにすることです。

問題はフィールドoActInterface)のアクセシビリティではなく、むしろACTInterface型そのもののアクセシビリティです。

26
Marc Gravell

support.ACTInterface型のアクセシビリティは何ですか。エラーはそれが公開されていないことを示唆しています。

シグネチャの一部のパラメータタイプがパブリックではない場合、パブリックメソッドシグネチャを公開することはできません。呼び出し側は必要なパラメータを構築できないため、外部からメソッドを呼び出すことはできません。

support.ACTInterfaceをpublicにすると、このエラーが取り除かれます。可能であれば、代わりにフォームメソッドのアクセシビリティを減らします。

8
James Gaunt

問題は変数に関するものではなく、ACTInterfaceの宣言に関するものです。 ACTInterfaceは偶然にも内部として宣言されていますか?

4
Craig W.

このエラーが発生したとき、私はpublicとして宣言していない "helper"クラスを使用していたクラスの中にこの問題を引き起こしていました。次のように、「ヘルパー」クラスを公開することでこのエラーを解決しました。

public ServiceClass {public ServiceClass(HelperClass _helper){}}

publicclass HelperClass {} //私の問題を解決したpublic HelperClassに注意してください。

これは、これに遭遇した他の誰かに役立つかもしれません。

2
Keenan Stewart

Parameter(アクセシビリティの低いクラス)をobjectとして取得し、それをasキーワードであなたのクラスに変換することができます。

0
Sadeq Shajary

新しい形式でクラス変数を使用するときにこのエラーが発生した場合は、クラス定義を

Formname.Designer.cs

formname.csファイルの代わりに。

0
ltsstar

私のエンティティフレームワークモデルを更新した後、私はこのエラーが私のソリューション内のいくつかのファイルに感染しているのを発見しました。 .edmxファイルとTTファイルを右クリックして[カスタムツールを実行]をクリックするだけで、Visual Studio 2012を再起動した後にもう一度表示されます。

0
Simon Kiely