来自静态方法的非静态对象
本文关键字:静态 对象 静态方法 | 更新日期: 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
。您应该在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;
}
}
}