2017-06-24 77 views
0

獲得這是A類C#從另一個類集,從另一個類

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

有沒有人有這個問題的解決方案?

+3

在'A'中定義的屬性是實例屬性,並且您在'B'和'C'中創建一個新實例,因此它們不使用相同的實例。 要麼使這些屬性爲靜態或創建一個'A'的實例並移動它。 –

回答

1

B聲明的aGetSetA一個對象。在C中聲明的aGetSetA的另一個對象。他們完全相互獨立。更改其中一個對象的值不會影響另一個的值。

要解決此問題,您需要使其成爲訪問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即可完成此項工作!

0

你有2個不同的對象在2類。當你使用'= new A()'時,它會創建新的實例。

爲什麼你越來越空原因就在這裏:

string username = aGetSet.uname; 

是字符串類型的默認值(如任何引用類型)爲空。

將B類中的'同一'對象傳遞給C類將C類中的主方法更改爲public Main(ref A obj)。這不會創建副本並使用相同的實例。從B類 呼叫:

A aObj = new A(); 
aGetSet.uname = "James"; 
aGetSet.fname = "Blunt"; 
C c = new C(); 
c.Main(ref aObj);