来自静态方法的非静态对象

本文关键字:静态 对象 静态方法 | 更新日期: 2023-09-27 18:25:36

我有一个简单的C#类。

在这个类中,我有一个对象,它在类本身的构造函数中初始化。

我对这个类的属性进行了一些mods/更新(我已经一步一步地进行了调试)。

从另一个类中,我想更新这些对象,所以我制作了一个静态方法,它返回这些对象。

但当我调用这个方法时,我得到的对象是初始化的值,而不是新值。为什么?它错了吗?我怎样才能拿到它?

这是我的代码的简化版本:

public class class1 
{
    private static MyObject p_var;
    public  MyObject MyVar
    {
        get { return p_var; }
        set { p_var= value; }
    }
    public static MyVar getVar(){
        MyVar w = p_var;
        return w;
    }
    public class1() {
        Debug.WriteLine("kjkjkj");
        MyVar= new MyObject ();
        MyVar.attr1 = "test init";
   }
}

示例:如果我从另一个类调用getVar,我得到的MyVar对象具有attr1值,如"testinit",而不是新的modded值l。

来自静态方法的非静态对象

在我看来,您在这里缺少了一些static。您应该在MyVarclass1构造函数上获得一个。在这种情况下,当第二次调用new class1()时,该值不会重置:

public class MyObject { public string attr1 { get; set; } }
public class class1
{
    public static MyObject MyVar // <-- here
    {
        get;
        private set; // <-- made private to prevent changes from the outside
    }
    // public static MyObject getVar() // use MyVar instead
    //{
    //    return MyVar;
    //}
    public static class1() // <-- here
    {
        Debug.WriteLine("kjkjkj");
        MyVar = new MyObject();
        MyVar.attr1 = "test init";
    }
}

您可以使用一个简单的单例实现来简化这一点:

public class class1
{
    private static MyObject p_var;
    public static MyObject MyVar
    {
        get
        {
            if (p_var == null)
            {
                p_var = new MyObject();
                p_var.attr1 = "test init";
            }
            return p_var;
        }
    }
}