簡體   English   中英

使用類的相同對象,但成員不同

[英]Using same objects of the class, but with different members

好的,所以我想在一個類中使用五次相同的對象。 它們都具有相同的屬性,但是它們只是多次出現。

     for(int i=0;i<5;i++){
         army1.Add(monkey);
         army1.Add(flyingMonkey);
         army1.Add(wizard);
         army1.Add(balloon);
     }

Troops類包含兩個屬性:Name和Health。 我希望所有的猴子都具有不同的實例,但又不要做出不同的變量(例如monkey1,monkey2)或不使用數組。 所有的猴子都受到不同程度的傷害,但是現在,傷害正在累積。

代碼: https//dotnetfiddle.net/YRukEz

輸出不同的原因是填充Troop對象列表的方式:

 for(int i=0;i<5;i++){
     army1.Add(monkey);
     army1.Add(flyingMonkey);
     army1.Add(wizard);
     army1.Add(balloon);
 }

您將通過五個迭代循環執行此操作。 因此,您的每個Troop實例都會被添加到列表中五次 (留下帶有20個元素的army1列表)。 因此,每個Troop元素必須刪除五次,直到不再在列表中。

只需刪除循環,代碼2中得到的行數將與代碼1中生成的行數匹配:

 army1.Add(monkey);
 army1.Add(flyingMonkey);
 army1.Add(wizard);
 army1.Add(balloon);

話雖如此,在循環中添加單位不一定是錯誤的。 在閱讀代碼時,我首先想到的是,您正在嘗試創建一支包含數個相同類型單位的軍隊(四只猴子,四只飛行的猴子,四個巫師和四個氣球)。

您可以這樣做,但是請注意,這樣做的方式是,您的軍隊不會包含四只不同的猴子,而是四只相同的猴子,因為您要添加同一對象實例四次。 當減少其中之一的運行狀況時,您會看到該變化反映在同一類型的其他三個項目中。

要生成具有多個相同類型單位的軍隊,您還必須在每次迭代中創建單位,而不是將相應的初始化代碼放入循環中:

for(int i=0;i<5;i++){
    Troop monkey = new Troop();
    Troop flyingMonkey = new Troop();
    Troop wizard = new Troop();
    Troop balloon = new Troop();

    monkey.name = "Monkey " + i;
    flyingMonkey.name = "Flying Monkey " + i;
    wizard.name = "Wizard " + i;
    balloon.name = "Balloon " + i;

    monkey.health = 50;
    flyingMonkey.health = 50;
    wizard.health = 60;
    balloon.health = 55;

    army1.Add(monkey);
    army1.Add(flyingMonkey);
    army1.Add(wizard);
    army1.Add(balloon);
}

編輯:順便說一句,在您的代碼和類的當前階段,您可以輕松編寫此代碼,而無需任何變量來創建單個部隊:

for (int i=0; i<5; i++){
    army1.Add(new Troop
    {
        name = "Monkey " + i,
        health = 50
    });
    army1.Add(new Troop
    {
        name = "Flying Monkey " + i,
        health = 50
    });
    army1.Add(new Troop
    {
        name = "Wizard " + i,
        health = 60
    });
    army1.Add(new Troop
    {
        name = "Balloon " + i,
        health = 55
    });
}

您有4組向導,猴子,飛行猴子和氣球(20個部隊物品)。

 for(int i=0;i<5;i++)
 {
             army1.Add(monkey);
             army1.Add(flyingMonkey);
             army1.Add(wizard);
             army1.Add(balloon);
 }

這意味着他們每個人必須死4次,然后才能再次露面。 但是在您的非Class代碼中,您只有4個。

var health = new List<int>() {50,50,60,55};

這就解釋了為什么向導會在非類代碼中早死,而又不斷返回(嗯,實際上,它不是向導的另一個實例)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM