如何解决当我从另一个类调用时,变量为零
这是我用来保留所有值的班级。在本课程中,我使用了面向对象的模型, 但是每当我要在Form2.cs中调用时,我都无法正确访问值。 如果我在Form1.cs中调用变量,那完全没有问题。
class1.cs
public class Class1
{
public Class1()
{
}
public Class1(double Yb,double Yz,double Yd,double Cz,double Fz,double qT,double Kt,double Qs,double Sds,double r,double genislikDeger1,double genislikDeger2,double genislikDeger3,double genislikDeger4,double yukselikDeger1,double yukselikDeger2,double yukselikDeger3,double yukselikDeger4,double ust,double kUst,double l)
{
this.genislikDeger1 = genislikDeger1;
this.genislikDeger2 = genislikDeger2;
this.genislikDeger3 = genislikDeger3;
this.genislikDeger4 = genislikDeger4;
this.yukselikDeger1 = yukselikDeger1;
this.yukselikDeger2 = yukselikDeger2;
this.yukselikDeger3 = yukselikDeger3;
this.yukselikDeger4 = yukselikDeger4;
this.ust = ust;
this.kUst = kUst;
this.L = l;
this.Yb = Yb;
this.Yz = Yz;
this.Yd = Yd;
this.Cz = Cz;
this.Fz = Fz;
this.qT = qT;
this.Kt = Kt;
this.Qs = Qs;
this.Sds = Sds;
this.r = r;
}
public double genislikDeger1 { get; set; }
public double genislikDeger2 { get; set; }
public double genislikDeger3 { get; set; }
public double genislikDeger4 { get; set; }
public double yukselikDeger1 { get; set; }
public double yukselikDeger2 { get; set; }
public double yukselikDeger3 { get; set; }
public double yukselikDeger4 { get; set; }
public double ust { get; set; }
public double kUst { get; set; }
public double L { get; set; }
public double Yb { get; set; }
public double Yz { get; set; }
public double Yd { get; set; }
public double Cz { get; set; }
public double Fz { get; set; }
public double qT { get; set; }
public double Kt { get; set; }
public double Qs { get; set; }
public double Sds { get; set; }
public double r { get; set; }
}
如果我这样设置变量; Form1.cs
private void Form1_Load(object sender,EventArgs e)
{
Class1 obj = new Class1();
obj.yukselikDeger1 = 25;
}
如果我调用我之前更改过的变量; Form2.cs
private void Form2_Load(object sender,EventArgs e)
{
Class1 obj = new Class1();
MessageBox.Show(obj.yukselikDeger1 + "");
}
结果就是这样;
解决方法
您正在创建两个单独的实例。这些值不会在实例之间保留-它们会占用两个独立的内存块。
如果要在Form1
和Form2
之间共享同一实例,则必须将其注入Form2
的构造函数中。
public partial class Form2 : Form
{
private Class1 _class1Obj;
public Form2(Class1 class1Obj)
{
InitializeComponent();
_class1Obj = class1Obj;
}
}
请记住,您必须在Class1
上初始化Form1
,作为类对象,或者在调用Form2
之前。
此外,如果您的Class1
应该拥有应用程序上每个类之间共享的值,请考虑实现singleton pattern。
就目前而言,建议您使用Singleton Provider共享一个Class1
实例作为您的应用程序模型:
public static class AppModelProvider{
// static readonly property => will always return the same instance of Class1
public static Class1 Model {get;} = new Class1();
}
然后您可以在每个表单中获取模型:
private void Form1_Load(object sender,EventArgs e)
{
Class1 obj = AppModelProvider.Model;
obj.yukselikDeger1 = 25;
}
private void Form2_Load(object sender,EventArgs e)
{
Class1 obj = AppModelProvider.Model;
MessageBox.Show(obj.yukselikDeger1 + "");
}
这有点类似于“资源定位器”(反)模式,如今,它通常会被抛弃以支持依赖项注入。但是,仅解决您的问题,这现在应该足够公平,并且以后可以轻松重构。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。