基本面向对象代码的输出不正确

问题描述 投票:0回答:1

所以我有一个简单的面向对象的 C# 代码,它的行为不符合预期。 这是我的对象类:

internal class Fighter
{
    public int Id { get; }
    public string Name { get; set; }
    int Health { get; set; } = 100;
    int Height { get; set; } = 180;
    int Weight { get; set; } = 78;
    static Weapon weapon { get; set; }
    int WeaponValue { get; } = (int)weapon;
    int DealedDamage { get; set; } = 0;
    bool IsMale { get; set; } = true;
    internal Random Random { get; private set; } = new Random();
    bool IsDead { get; set; } = false;

    public Fighter(int id, string name, Weapon weap) { this.Id = id; this.Name = name; weapon = weap;}

public void Description()
 {
     Console.WriteLine("Fighter ID : " + Id + ", Name : " + Name + ", Weapon : " + weapon + ", dealing " + WeaponValue + " pts of damage.");
 }
 }

我的“武器”枚举:

internal enum Weapon { Couteau = 1, Machette = 3, Pistolet = 5, Grenade = 10, Mitraillette = 15, Fusil = 30 }

最后是我的 Program.cs 类:

    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
            Console.WriteLine("Bienvenue dans le programme de baston.");
            Fighter fighter1 = new Fighter(0, "Gaston", Weapon.Couteau);
            Fighter fighter2 = new Fighter(1, "Francis", Weapon.Grenade);
            fighter1.Description();
            fighter2.Description();
   
        }
    }

我在 Visual Studio 2022 中以调试模式运行代码时得到此输出:

Hello, World!
Bienvenue dans le programme de baston.
Fighter ID : 0, Name : Gaston, Weapon : Grenade, dealing 0 pts of damage.
Fighter ID : 1, Name : Francis, Weapon : Grenade, dealing 1 pts of damage.

Sortie de C:\Users\donna\Desktop\FightingTournament\bin\Debug\net6.0\FightingTournament.exe (processus 23112). Code : 0.
Pour fermer automatiquement la console quand le débogage s'arrête, activez Outils->Options->Débogage->Fermer automatiquement la console à l'arrêt du débogage.
Appuyez sur une touche pour fermer cette fenêtre. . .

这不是我所期望的,我应该为我实例化的两个对象拥有不同的武器。

这怎么可能?

感谢您的阅读

我尝试将枚举放置在它自己的命名空间中。 我尝试改变枚举等的可见性。 我还尝试为 Weapon 变量传递不同的值。

每次输出都不正确。

c#
1个回答
0
投票

这是因为你将武器标记为

static
。这意味着所有战士类别共享一种武器,因此所有战士都将拥有分配给任何战士的最后武器。

只需将

weapon
声明为公开,它将按预期工作:

public Weapon weapon { get; set; }
© www.soinside.com 2019 - 2024. All rights reserved.