我有一个简单的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值。
答案 0 :(得分:2)
在我看来,你在这里遗漏了一些static
。你应该在MyVar
和class1
构造函数上得到一个。在这种情况下,第二次调用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;
}
}
}