这是A级
Class A
{
public string uname { get; set; }
public string fname { get; set; }
}
我按B类设置值
Class B
{
private void Main(){
A aGetSet = new A();
aGetSet.uname = "James";
aGetSet.fname = "Blunt";
}
}
但是当我在C类中获得值时,它总是返回null
Class C
{
private void Main() {
A aGetSet = new A();
string username = aGetSet.uname;
string fistname = aGetSet.fname;
}
}
有没有人能解决这个问题?
答案 0 :(得分:4)
aGetSet
中声明的B
是A
的对象。 aGetSet
中声明的C
是A
的另一个对象。它们完全相互独立。更改其中一个对象的值不会影响另一个对象的值。
要解决此问题,您需要进行此操作,以便访问B
和C
中的同一个实例。
有很多方法可以做到这一点。我将向您展示如何使用单例模式。
class A
{
public string uname { get; set; }
public string fname { get; set; }
private A() {} // mark this private so that no other instances of A can be created
public static readonly A Instance = new A();
}
class B
{
public void Main(){
// here we are setting A.Instance, which is the only instance there is
A.Instance.uname = "James";
A.Instance.fname = "Blunt";
}
}
class C
{
public void Main() {
B b = new B();
b.Main();
string username = A.Instance.uname;
string fistname = A.Instance.fname;
}
}
现在你只需要致电C.Main
来完成这项工作!
答案 1 :(得分:0)
您在2个班级中有2个不同的对象。当您使用'= new A()'时,它会创建新实例。
你在这里获得null的原因:
string username = aGetSet.uname;
是字符串类型的默认值(与任何引用类型一样)为null。
将类B中的“相同”对象传递给C类中的主要方法更改方法到公共Main(ref A obj)。这不会创建副本并使用相同的实例。 来自B级的电话:
A aObj = new A();
aGetSet.uname = "James";
aGetSet.fname = "Blunt";
C c = new C();
c.Main(ref aObj);