2013-10-05 111 views
1

我想学习使用构造函数在两个C#表单之间传递一个列表,如下所示。在第一种形式我做:在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; 
    } 

但我总是得到一个错误的第二种形式的构造说:

错误1可访问性不一致:参数类型 'System.Collections.Generic.List < _05_WindowsFormsAppCat.Cat>' 比方法更少可访问的“_05_WindowsFormsAppCat.DisplayForm.DisplayForm(System.Collections.Generic.List < _05_WindowsFormsAppCa t.Cat>)'

任何想法?

+3

显示Cat的定义。我敢打赌,这不是“公共” –

回答

3

你在哪里申报Cat班?它必须公开访问DisplayForm类。您可能需要将public关键字添加到其声明中。

这被称为类型或成员的可访问性。

这里是不同层次和它们的默认值的参考:

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

我猜你Cat类型要么是在其他组件(项目)作为DisplayForm,在这种情况下,在默认情况下,该项目中的类不可见,或者您将其定义为您的第一个Form类的嵌套类,它将使其成为private并可在该表单的范围内访问。

8

List这部分是一个完整的红鲱鱼在这里。如果您的构造函数具有Cat参数而不是List<Cat>参数,则会出现完全相同的问题。

您的Cat类型可能是内部的,因为您尚未将其声明为public。因此,你不能在公共成员签字,用它像这样:

public DisplayForm(List<Cat> catList) 

选项:

  • Cat一个公共类
  • 让您DisplayForm构造内部

就我个人而言,我尽可能保持私人和实用 - 尽管对于小型升项目它不会有太大的区别,特别是对于只有一个程序集的应用程序而言。大多数开发商倾向于在公布所有内容方面犯错,这是IMO的一个错误,但这是一个判断呼吁。上述两个选项都可以正常工作......但至少认为是关于您是否想让其他程序集知道Cat类型(或者确实希望其他程序集中的代码是否能够调用该构造函数) 。