我將不勝感激一些幫助重構我的代碼。如果我將對象的實例傳遞給另一個對象,那麼是否有任何方法可以重新實例化該實例而不會丟失引用?C#對象實例化問題
這是問題我的簡化版:
public class Program
{
static void Main(string[] args)
{
Animal myPet = new Cat();
House myHouse = new House(myPet);
House petDayCare = new House(myPet);
Console.WriteLine(String.Format("My pet has {0} flea(s)", myPet.Fleas.ToString()));
myHouse.AddFlea();
Console.WriteLine(String.Format("My pet has {0} flea(s)", myPet.Fleas.ToString()));
petDayCare.AddFlea();
Console.WriteLine(String.Format("My pet has {0} flea(s)", myPet.Fleas.ToString()));
myHouse.GetNewPet();
Console.WriteLine(String.Format("My pet has {0} flea(s)", myPet.Fleas.ToString()));
Console.ReadLine();
}
}
public class House
{
Animal _currentPet;
public House(Animal currentPet) {
_currentPet = currentPet;
}
public Animal CurrentPet {
get { return _currentPet; }
set { _currentPet = value; }
}
public void AddFlea() {
_currentPet.Fleas += 1;
}
public void GetNewPet() {
Animal rover = new Dog();
rover.Fleas = 100;
_currentPet = rover;
}
}
public abstract class Animal {
int _fleas;
public int Fleas {
get { return _fleas; }
set { _fleas = value; }
}
public abstract string GetSound();
}
public class Cat : Animal
{
public override string GetSound() {
return "Meow";
}
}
public class Dog : Animal
{
public override string GetSound()
{
return "Woof";
}
}
能myPet.Fleas打完電話後=以程序100 GetNewPet()?
如果我想改變對象實例的基礎類型,我可以這樣做嗎?如果沒有,有沒有人有任何重構建議?
我會嘗試描述實際程序結構的細節。
我正在創建一個WPF嚮導。
該向導有步驟。
當我啓動Wizard時,會創建一個WizardViewModel類的實例。
WizardViewModel類具有ObjectX的實例(對象whoes屬性我想修改,然後在嚮導完成時返回對象)。
嚮導中的每個步驟都是在構造函數中傳遞ObjectX實例的WizardPageViewModelBase類的實例。
WizardViewModel有一個WizardPageViewModelBase對象的列表(每個嚮導步驟的一個對象實例)。
因此,只要我在每個嚮導步驟(WizardPageViewModelBase對象實例)中更改ObjectX實例的屬性,那麼由WizardViewModel返回的對象就能正常工作。
但是,在嚮導的第1步中,我想根據用戶從列表框中選擇的內容來更改ObjectX的基礎類型。如果我改變實例(就像我在上面的GetNewPet()中做的那樣),那麼在WizardViewModel中對ObjectX實例的引用就會丟失。
道歉,如果這是沒有意義的,我想我最好的你永遠用家的寵物結構問題在可以回答的方式...
謝謝您的回覆。我明白你對多個對象實例的看法,而不是「失去參考」。我想我的問題是,如果我需要更改House中的myPet的基礎類型,我該如何避免放棄對myPet的引用? – dior001
@ ernie99真正的問題是世界衛生組織,你不想讓參考失去?你想讓衆議院知道這兩個寵物嗎?或者你想要別的東西抓住寵物?如果你想要房子記住,那麼你需要實現某種類型的寵物列表,而不是一個,只有一個寵物會成爲當前的寵物。 – Joseph
當對House中的Animal實例的屬性進行更改時,我希望將該更改應用於Program中的myPet。目前,只要我不調用GetNewPet(),就會發生這種情況。我可以看到,我提出的這個程序設計問題可能過於開放,無法完全回答。我會修改我的設計並找到更好的結構。感謝大家的幫助。 – dior001