如何在类中的类的新对象声明中使用数组?

时间:2013-07-22 17:27:48

标签: c# arrays class

基本上我创建了这个skill类:

public class skill
{
    public int          level { get; set; }             //Level of the skill    (average of sub-skills' levels)
    public int          arrayCount { get; set; }        //Number of skill/levels in the below arrays
    public string[]     sub_skills { get; set; }        //Names of sub-skills   ([0] connect's to levels' [0], etc.)
    public int[]        sub_levels { get; set; }        //Levels of sub-skills  ([0] connect's to names' [0], etc.)
    void set(int l, int a, string[] sub_s, int[] sub_l)
    {
        this.level          = l;                //Sets the skill's level to the input'd l value
        this.arrayCount     = a;                //Sets the skill's array count to the input'd a value
        for (int i = 0; i < arrayCount; i++)    //For loop to assign each value in both arrays
        {
            this.sub_skills[i] = sub_s[i];      //Assigns each input'd sub_s array value to each sub_skills value
            this.sub_levels[i] = sub_l[i];      //Assigns each input'd sub_l array value to each sub_levels value
        }

    }
}

现在我创建了另一个类player

public class Player
{
    public string   name { get; set; }          //Name of Player
    public int      level { get; set; }         //Player's combat level             (average of combat-related skills' levels)
    //Start Thievery skill block
    string[] thief_s = { "lockpicking", "looting", "pickpocketing", "sneaking" };       //Array for thievery's sub-skill names
    int[] thief_i = { 1, 1, 1, 1 };                                                     //Array for thievery's sub-levels
    skill thievery      = new skill();          //Creates the skill of Thievery     (stealing items / passing unnoticed)
    //Start Melee skill block
    skill melee         = new skill();          //Creates the skill of Melee        (close-range, strong combat)
    //Start Archery skill block
    skill archery       = new skill();          //Creates the skill of Archery      (long-range, weak combat)
    //Start Magicka skill block
    skill magicka       = new skill();          //Creates the skill of Magicka      (medium-range, medium combat)
    //Start Craftship skill block
    skill craftship     = new skill();          //Creates the skill of Craftship    (retreivement then creation of items from materials)


}

我如何使用set()skill类中的player方法,以获得player类中创建的特定技能?例如,您可以看到我在那里创建的技能thievery,其数组已经包含了子级别的名称和级别(skill类中的变量)。如何访问thievery的{​​{1}}函数并使用其中的数组来设置set()的变量?我已尝试过行thievery,但我的IDE一直在抛出错误。 (我正在使用Microsoft Visual Studio Ultimate 2010)

编辑:谢谢大家。出于某种原因,将thievery.set(// insertvarshere)函数设置为public并没有改变任何内容。当我调用set()时,我的IDE会在thievery.set()下面抛出红线。我将接受查尔斯的建议并掌握子技能,然后,如果可能的话,对他们应用某种标签,将其标记为主要技能的一部分。这是可能的,还是我必须为标签创建我自己的类/功能等?

3 个答案:

答案 0 :(得分:3)

从表面上看,你需要公开它:

public void set(int l, int a, string[] sub_s, int[] sub_l) {
  ...

然后,对于每个技能实例,您可以调用它:

thievery.set( ... );

您想要调用它的位置以及使用哪些参数参数取决于您。

答案 1 :(得分:0)

除非我在这里遗漏了一些内容,否则你需要通过公开或建立一个调用它的新公共方法来使set方法可见。你可能需要一个抽象的方法,调用set你想要它的方式,以便消费者正确使用它。

答案 2 :(得分:0)

您在哪里尝试调用set课程中的Player方法。您只能在set类的另一个方法或构造函数中调用Player方法。这可能就是你收到错误的原因。

编辑:您还需要为该方法添加公共。