如何使用以另一种形式实例化的类中的方法?

本文关键字:方法 实例化 何使用 另一种 | 更新日期: 2023-09-27 18:12:44

我在Form1中安装了一个类,我想叫它Form2,这是可能的吗?

例如:

public TheClass thClass; //member from Form1
/* ... */ 
public void foo() { 
       thClass = new TheClass(...);
} 

形式2:

public void baa() { 
        Form1 form1 = new Form1();
        form1.thClass.MethodName( .. ) ;
}

Form2中调用.baa()方法时,我得到以下错误:

Object reference not set to an instance of an object.

最好的方法是什么?ref吗?我不想再实例化thClass了

我希望这是清楚的。提前感谢。

如何使用以另一种形式实例化的类中的方法?

你得到这个例外,因为thClassnull -在你的例子中,你必须在使用thClass之前调用foo()

引用类型字段没有什么特别的——它们可以像类的任何其他公共字段一样被访问(Form1就是一个类)。一般情况下,你会希望使用属性,避免使用公共字段,因为对它们的任何更改都会破坏现有的消费者——一个只能由拥有类设置的属性,你可以将其表示为

public TheClass SomeClass {get; private set;}

最好的方法可能是将Form1中class的实例传递给Form2的构造函数。

// Code from Form 1
public partial class Form1 : Form
{
    private TheClass thClass;
    public Form1()
    {
        InitializeComponent();
    }
    public void foo()
    { 
        thClass = new TheClass(...);
    }
    private void button1_Click(object sender, EventArgs e)
    {
        Form2 objForm2 = new Form2(thClass);
        objForm2.Show();
    }
}
// Code From Form 2
public partial class Form2 : Form
{
    private TheClass thClass;
    public Form2(TheClass thCls)
    {
        thClass = thCls;
        InitializeComponent();
    }
    private void baa(object sender, EventArgs e)
    {
        thClass.MethodName( .. );
    }
}

你应该调用Foo()来初始化"thClass"....

public void baa() { 
    Form1 form1 = new Form1();
    form1.foo();
    form1.thClass.MethodName( .. ) ;
}

由于您在foo方法中初始化了thClass,因此您只需在使用thClass之前调用该方法

public void baa() { 
        Form1 form1 = new Form1();
        form1.foo();
        form1.thClass.MethodName( .. ) ;
}

或者直接初始化

public void baa() { 
        Form1 form1 = new Form1();
        form1.thClass = new TheClass(...);
        form1.thClass.MethodName( .. ) ;
}