这是:
我有两个表单和一个类,我想传递这个类的实例 Form1到Form2通过参数(属于第二种形式的构造函数)。
public partial class Form1 : Form
{
Class1 cl = new Class1();
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frm_2 = new Form2(cl);
}
}
因此,我收到了以下错误:
访问性不一致:参数类型“WindowsFormsApplication1.Class1”的方法不如方法“WindowsFormsApplication1.Form2.Form2(WindowsFormsApplication1.Class1)”
public partial class Form2 : Form
{
public Form2(Class1 c)
{
InitializeComponent();
Class1 c_1 = new Class1();
c_1 = c;
}
}
感谢。
答案 0 :(得分:8)
Class1
是程序集的内部类,但是您正在创建一个以Class1
为参数的公共类的公共方法。这就像你公开发布一则广告,说“我们正在接受一份工作申请,但如果你已经在这里工作,你只能获得申请表的副本”。它没有任何意义,因此编译器不允许它。
答案 1 :(得分:3)
您已将Class1
定义为internal
:
internal class Class1
{
}
或(相同):
class Class1
{
}
但是你有一个public
方法(在这种情况下是一个构造函数),它接受Class1
类型的参数。 public
表示它可以从任何其他程序集中看到,但internal
表示只能从定义它的程序集(程序集)中看到它。所以,你有一个任何人都可以调用的方法,它接受一个只有你能看到的类型的参数。那不行。你有两个选择:
Class1
public class Class1
{ }
如果您不介意可以从任何程序集访问该类。
internal Form2(Class1 c)
{ }
如果您不介意除了您之外的任何其他程序集都不能创建表单。
答案 2 :(得分:1)
Class1需要声明为公共类,即public class Class1() {...}
,以供其他公共类使用
答案 3 :(得分:0)
您的Class1应该是公共的,因为Form2及其构造函数具有公共范围。如果我们不将Class1设为公共,则访问受限。这就是编译器显示此消息的原因。
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public Form2(Class1 c)
{
InitializeComponent();
Class1 c_1 = new Class1();
c_1 = c;
}
}
public class Class1
{
// Your code for Class1
}