1

ここにあります:

2 つのフォームと 1 つのクラスがあります。このクラスのインスタンスを Form1 から Form2 にパラメーター (2 番目のフォームのコンストラクターに属する) を介して渡したいと考えています。

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

あなたはあなたを次のように定義Class1しましたinternal

internal class Class1
{
}

または(同じ):

class Class1
{
}

しかしpublic、 type のパラメーターを受け入れるメソッド (この場合はコンストラクター) がありますClass1publicは、他のアセンブリから見えることをinternal意味しますが、それを定義するアセンブリ (自分のアセンブリ) からのみ見えることを意味します。したがって、誰でも呼び出すことができ、自分だけが見ることができる型のパラメーターを受け入れるメソッドがあります。それはうまくいきません。ここには 2 つのオプションがあります。

オプション 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 に答える