1

以下に示すように、コンストラクターを使用して 2 つの C# フォーム間でリストを渡すことを学習しようとしています。最初のフォームで私がした:

List<Cat> myCatList;
//list populating function...
private void btnDisplay_Click(object sender, EventArgs e)
 {
    df = new DisplayForm(myCatList);   
    df.Show();
    this.Hide();
 }

次のフォームでは、以下に示すようにデータを受信しようとしました。

List<Cat> catList; 
public DisplayForm(List<Cat> catList)
  {
     InitializeComponent();
     this.catList = catList;
  }

しかし、2番目のフォームコンストラクターで常に次のようなエラーが発生します。

エラー 1 一貫性のないアクセシビリティ: パラメータ タイプ 'System.Collections.Generic.List<_05_WindowsFormsAppCat.Cat>' は、メソッド '_05_WindowsFormsAppCat.DisplayForm.DisplayForm(System.Collections.Generic.List<_05_WindowsFormsAppCat.Cat>)' よりもアクセスしにくいです

何か案は?

4

2 に答える 2

8

ここのList部分は完全にニシンです。Catコンストラクターにパラメーターの代わりにパラメーターがある場合、まったく同じ問題が発生しList<Cat>ます。

Catとして宣言していないため、型はおそらく internalですpublicしたがって、次のようなpublicメンバーの署名では使用できません。

public DisplayForm(List<Cat> catList)

オプション:

  • Cat公開クラスを作る
  • コンストラクターをDisplayForm内部にする

個人的には、実用的である限りプライバシーを保つことに賛成です。ただし、小さなプロジェクトの場合、特に単一のアセンブリに過ぎないアプリの場合は、それほど大きな違いはありません。ほとんどの開発者は、すべてを公開する側で過ちを犯す傾向があります。これは IMO の間違いですが、それは判断の呼びかけです。上記のオプションは両方とも問題なく機能します...ただし、少なくとも他のアセンブリに型を認識させるCatどうか (または実際に他のアセンブリのコードでそのコンストラクターを呼び出せるようにするかどうか) を検討する必要があります。

于 2013-10-05T19:15:13.857 に答える
3

Catクラスはどこで宣言しましたか?DisplayFormクラスがパブリックにアクセスできる必要があります。publicその宣言にキーワードを追加する必要がある場合があります。

これは、型またはメンバーのアクセシビリティと呼ばれます。

以下は、さまざまなレベルとそのデフォルト値のリファレンスです。

http://msdn.microsoft.com/en-us/library/ba0a1yw2.aspx

あなたのCat型は別のアセンブリ (プロジェクト) にあったと推測していDisplayFormます。privateそのフォームの範囲内でアクセスできるようにします。

于 2013-10-05T19:15:15.273 に答える