C#从另一个类设置并从另一个类获取

时间:2017-06-24 07:40:40

标签: c#

这是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;
}
}

有没有人能解决这个问题?

2 个答案:

答案 0 :(得分:4)

aGetSet中声明的BA的对象。 aGetSet中声明的CA的另一个对象。它们完全相互独立。更改其中一个对象的值不会影响另一个对象的值。

要解决此问题,您需要进行此操作,以便访问BC中的同一个实例。

有很多方法可以做到这一点。我将向您展示如何使用单例模式。

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);