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

时间:2014-10-06 08:23:17

标签: c# class static return non-static

我有一个简单的C#类。

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

我对这个类的属性做了一些mods / update(我已经逐步调试了)。

从另一个类,我希望更新这些对象,所以我创建了一个静态方法,它返回这些对象。

但是,当我调用此方法时,我得到的对象具有初始值,而不是新值。为什么?这是错的吗?我怎么能得到它?

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

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,我会获得具有attr1值的MyVar对象,如“test init”,而不是新的modded值。

1 个答案:

答案 0 :(得分:2)

在我看来,你在这里遗漏了一些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;
        }
    }
}