2014-03-27 35 views
-1

如何在不丟失Y上的X引用的情況下做到這一點?如何創建新對象並更改其他引用

 public class Test 
     { 
      public void Main() 
      { 
       AbstractClass X = new Foo(); 

       Test2 test2 = new Test2(X); 

       X = new Bar(); // I need to change Y as well. 

       //Now, X is Bar, and Y is Foo. 
       if (X == test2.Y) 
        MessageBox.Show("They are equal! Success!!"); 
       else 
        MessageBox.Show("Not equal :("); 
      } 
     } 

     public class Test2 
     { 
      public AbstractClass Y { get; set; } 

      public Test2(AbstractClass y) 
      { 
       Y = y; 
      } 
     } 

     public abstract class AbstractClass 
     { } 

     public class Foo : AbstractClass 
     { } 

     public class Bar : AbstractClass 
     { } 
+2

請明確說明你正在嘗試做的事:它是不明確的。 – Richard

+1

基本上,你**不能** –

+0

@ Selman22是的,但他想知道如何做到這一點,另一種方式,而不會失去X和Y的參考。 –

回答

3

你不能。如果你需要這樣的東西,你可以將AbstractClass包裝在另一箇中,並將其作爲參考。

這裏是你如何去:

public class MyPropertyStore 
{ 
    public AbstractClass MyProperty {get;set;} 
} 

public class Test2 
{  
    private MyPropertyStore propertyStore; 
    public AbstractClass Y { get { return propertyStore.MyProperty ;} } 

    public Test2(MyPropertyStore propertyStore) 
    { 
     this.propertyStore= propertyStore; 
    } 
} 

public void Main() 
{ 
    AbstractClass X = new Foo(); 
    MyPropertyStore store = new MyPropertyStore 
    { 
    MyProperty = X, 
    }; 
    Test2 test2 = new Test2(store); 

    store.MyProperty = new Bar(); // Now test2.Y will be pointing to same reference 

    //Now, X is Bar, and Y is Foo. 
    if (X == test2.Y) 
     MessageBox.Show("They are equal! Success!!"); 
    else 
     MessageBox.Show("Not equal :("); 
} 
+0

感謝您的回答。 –

+0

不客氣 –

1

我不知道你試圖實現什麼,但我想你想的fowllowing發生:

public void Main() 
{ 
    AbstractClass X = new Foo(); 

    Test2 test2 = new Test2(X); 

    X = new Bar(); 

    // change test2.Y 
    test2.Y = X; 

    if (X == test2.Y) 
     MessageBox.Show("They are equal! Success!!"); 
    else 
     MessageBox.Show("Not equal :("); 
} 
+0

很好的答案。 :D –

+0

認真......? :p –

相關問題