我正在尝试学习使用构造函数在两个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&lt; _05_WindowsFormsAppCat.Cat&gt;'比方法'_05_WindowsFormsAppCat.DisplayForm.DisplayForm(System.Collections.Generic.List&lt; _05_WindowsFormsAppCat.Cat&gt;)'
更难访问有什么想法吗?
答案 0 :(得分:8)
List
部分是一个完整的红鲱鱼。如果您的构造函数具有Cat
参数而不是List<Cat>
参数,则会出现完全相同的问题。
您的Cat
类型可能是内部类型,因为您尚未将其声明为public
。因此,您无法在 public 成员的签名中使用它,例如:
public DisplayForm(List<Cat> catList)
选项:
Cat
成为公共课DisplayForm
内置构造函数我个人认为,尽管对于小型项目而言,它并不会产生太大的影响,特别是对于那些只是单一装配的应用程序而言,我只是为了保持私密性。大多数开发人员倾向于错误地将所有内容公开,这是IMO的错误,但这是一个判断调用。上述两个选项都可以正常工作......但是你至少应该思考关于你是否希望任何其他程序集知道Cat
类型(或者你是否想要其他代码)程序集能够调用该构造函数)。
答案 1 :(得分:3)
你在哪里宣布Cat
课程?它必须可由DisplayForm
类公开访问。您可能必须在其声明中添加public
关键字。
这称为类型或成员的可访问性。
以下是不同级别及其默认值的参考:
http://msdn.microsoft.com/en-us/library/ba0a1yw2.aspx
我猜你的Cat
类型在另一个程序集(项目)中作为DisplayForm
,在这种情况下默认情况下该项目中的类不可见,或者您定义的它作为你的第一个Form类的嵌套类,它将使它成为private
并且可以在该Form的范围内访问。