1

I am trying to learn passing a list between two C# forms using constructors as shown below. On the first form I did:

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

On the next form, I tried to receive the data as shown below:

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

But I always get an error on the second form constructor saying:

Error 1 Inconsistent accessibility: parameter type 'System.Collections.Generic.List<_05_WindowsFormsAppCat.Cat>' is less accessible than method '_05_WindowsFormsAppCat.DisplayForm.DisplayForm(System.Collections.Generic.List<_05_WindowsFormsAppCat.Cat>)'

Any ideas?

4

2 回答 2

8

List部分是一个完整的红鲱鱼。Cat如果你的构造函数有一个参数而不是一个参数,你会遇到完全相同的问题List<Cat>

您的Cat类型可能是内部的,因为您尚未将其声明为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,在这种情况下,默认情况下它对该项目中的类不可见,或者你将它定义为你的第一个 Form 类的嵌套类在该表格的范围内制作private并访问。

于 2013-10-05T19:15:15.273 回答