首页 > 解决方案 > C# 访问类数据,初学者问题

问题描述

我正在尝试创建一个武器数据库,并为每种武器分配多个属性,例如名称、攻击值、购买值、销售值等。

namespace Testing
{ 
    public class Weapon
    {
        public string name;
        //other attributes would go here too
    }
    
    class Program
    {
        static void WeaponBuilder()
        {
            Weapon bSword = new Weapon();
            bSword.name = "Bronze Sword";
            //many other weapons would be built here
            Console.WriteLine(bSword.name); //works fine
        }

        static void Main(string[] args)
        {     
            WeaponBuilder();
            Console.WriteLine(bSword.name); //error: bSword does not exist in the current context
            WeaponShop();
            Console.ReadLine();
        }

        static void WeaponShop()
        {
            Console.WriteLine("Buy " + bSword.name + "?"); //error: bSword does not exist in the current context
        }
    }
}

我需要能够在制造地点之外访问武器的数据。任何帮助表示赞赏。我知道这是一个菜鸟问题,我很抱歉。

标签: c#classobject

解决方案


您可以将数据放在类级别而不是临时局部范围变量:

class Program
{
    static public Weapon bSword { get; } = new Weapon();

    static void InitializeWeapon()
    {
        BSword.name = "Bronze Sword";
        Console.WriteLine(bSword.name); //works fine
    }

    static void Main(string[] args)
    {     
        InitializeWeapon();
        Console.WriteLine(BSword.name);
        WeaponShop();
        Console.ReadLine();
    }
  ...
}

因此,它可以在类内部和外部以只读模式访问,作为一个组合

您似乎想管理多种武器,因此您可以使用List

public class Weapon
{
  public string Name { get; set; }
}

class Program
{

  static public List<Weapon> Weapons { get; } = new List<Weapon>();

  static void InitializeWeapons()
  {
    Weapons.Add(new Weapon { Name = "Bronze Sword" });
    Weapons.Add(new Weapon { Name = "Silver Sword" });
    foreach ( var weapon in Weapons )
      Console.WriteLine(weapon.Name);
  }

  static void Main(string[] args)
  {
    InitializeWeapons();
    ShopWeapon();
    Console.ReadLine();
  }

  static void ShopWeapon()
  {
    foreach ( var weapon in Weapons )
    {
      Console.WriteLine($"Buy {weapon.Name}?");
      // ...
    }
  }
}

什么是 OOP 概念?

C# 中的抽象是什么?

如何在公共、私有和受保护的访问修饰符之间进行选择?

什么是多态性?

接口和类有什么区别?


推荐阅读