微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当我从另一个类调用时,变量为零

如何解决当我从另一个类调用时,变量为零

这是我用来保留所有值的班级。在本课程中,我使用了面向对象的模型, 但是每当我要在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 + "");
}

结果就是这样;

enter image description here

解决方法

您正在创建两个单独的实例。这些值不会在实例之间保留-它们会占用两个独立的内存块。

如果要在Form1Form2之间共享同一实例,则必须将其注入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 举报,一经查实,本站将立刻删除。