私は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
私は問題が何であるかを私は本当に理解していません - 両方のフィールドはプライベートであり、そしてフォームから関連するパブリックメソッドによってアクセスされます。グーグルはそれがただ一つの要素がパブリックであることと他のプライベートであることを指し示しているので、実際には役に立ちません。
誰か手伝ってくれる?
public
クラスclients
のコンストラクタはpublic
ですが、型ACTInterface
のパラメータはprivate
です(クラスにネストされていますか?)。それはできません。 ACTInterface
を少なくともclients
と同じくらいアクセス可能にする必要があります。
クラスを公開します。
class NewClass
{
}
と同じです。
internal class NewClass
{
}
だからクラスはパブリックでなければなりません
ACTInterface
型のように聞こえる場合はpublic
ではありませんが、internal
(最上位の場合)またはprivate
(別の型にネストされている場合)のデフォルトのアクセシビリティを使用しています。
型をpublic
修飾子にすることで修正されます。
別の方法は、型とメソッドの両方をinternal
にすることです。
問題はフィールド(oActInterface
)のアクセシビリティではなく、むしろACTInterface
型そのもののアクセシビリティです。
support.ACTInterface
型のアクセシビリティは何ですか。エラーはそれが公開されていないことを示唆しています。
シグネチャの一部のパラメータタイプがパブリックではない場合、パブリックメソッドシグネチャを公開することはできません。呼び出し側は必要なパラメータを構築できないため、外部からメソッドを呼び出すことはできません。
support.ACTInterface
をpublicにすると、このエラーが取り除かれます。可能であれば、代わりにフォームメソッドのアクセシビリティを減らします。
問題は変数に関するものではなく、ACTInterfaceの宣言に関するものです。 ACTInterfaceは偶然にも内部として宣言されていますか?
このエラーが発生したとき、私はpublicとして宣言していない "helper"クラスを使用していたクラスの中にこの問題を引き起こしていました。次のように、「ヘルパー」クラスを公開することでこのエラーを解決しました。
public ServiceClass {public ServiceClass(HelperClass _helper){}}
publicclass HelperClass {} //私の問題を解決したpublic HelperClassに注意してください。
これは、これに遭遇した他の誰かに役立つかもしれません。
Parameter(アクセシビリティの低いクラス)をobject
として取得し、それをas
キーワードであなたのクラスに変換することができます。
新しい形式でクラス変数を使用するときにこのエラーが発生した場合は、クラス定義を
Formname.Designer.cs
formname.csファイルの代わりに。
私のエンティティフレームワークモデルを更新した後、私はこのエラーが私のソリューション内のいくつかのファイルに感染しているのを発見しました。 .edmxファイルとTTファイルを右クリックして[カスタムツールを実行]をクリックするだけで、Visual Studio 2012を再起動した後にもう一度表示されます。