1

这里是:

我有两个表单和一个类,我想通过一个参数(属于第二个表单的构造函数)将这个类的实例从 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;
    }
}

谢谢。

4

4 回答 4

8

Class1是您的程序集的内部类,但您正在创建一个公共类的公共方法,该公共类Class1作为参数。这就像您公开发布广告说“我们正在接受工作申请,但如果您已经在这里工作,您只能获得申请表的副本”。它没有任何意义,所以编译器不允许它。

于 2013-03-06T19:28:39.087 回答
3

您已将您定义Class1internal

internal class Class1
{
}

或(相同):

class Class1
{
}

但是您有一个public接受类型参数的方法(在本例中为构造函数)Class1public表示它对任何其他程序集可见,但internal意味着它仅在定义它的程序集(您的程序集)中可见。所以,你有一个任何人都可以调用的方法,它接受一个只有你才能看到的类型的参数。那是行不通的。您在这里有两个选择:

选项 1:Class1公开

public class Class1
{ }

如果您不介意可以从任何程序集中访问该类。

选项 2:将表单的构造函数设为内部

internal Form2(Class1 c)
{ }

如果您不介意除了您的程序集之外的任何其他程序集都不能创建该表单。

于 2013-03-06T19:34:11.837 回答
1

Class1 需要被声明为公共类,即public class Class1() {...}为了被其他公共类使用

于 2013-03-06T19:27:09.880 回答
0

您的 Class1 应该是公共的,因为 Form2 并且它的构造函数具有公共范围。如果我们不将 Class1 设为 public,那么访问是有限的。这就是编译器显示此消息的原因。

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
}
于 2013-03-06T19:47:38.683 回答