所以我有一个简单的面向对象的 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 变量传递不同的值。
每次输出都不正确。
这是因为你将武器标记为
static
。这意味着所有战士类别共享一种武器,因此所有战士都将拥有分配给任何战士的最后武器。
只需将
weapon
声明为公开,它将按预期工作:
public Weapon weapon { get; set; }