如何使用以另一种形式实例化的类中的方法?
本文关键字:方法 实例化 何使用 另一种 | 更新日期: 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了
我希望这是清楚的。提前感谢。
你得到这个例外,因为thClass
是null
-在你的例子中,你必须在使用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( .. ) ;
}