【问题标题】:Call objects created within another method调用在另一个方法中创建的对象
【发布时间】:2016-03-13 01:38:05
【问题描述】:

我试图引用在方法中创建的对象。

这是 Main 方法。

static void Main(string[] args)
{
    //call all cube base details into existance.
    callCubes();

    //Test Output
    Console.WriteLine("Name: " + blank.name);
    Console.WriteLine("Health: " + blank.health);
    Console.WriteLine("Attack: " + blank.attack);
    Console.WriteLine("");
    Console.ReadKey();
}

这是callCubes 方法。

static void callCubes()
{
    cube blank = new cube();
    blank.base_stats(00, "Blank", 0, 0, 0, 0, 0, 0.00); //id, name, atk, def, speed, sp. atk, sp. def, health
    blank.ev_stats(0, 0, 0, 0, 0, 0.00); //atk, def, speed, sp. atk, sp. def, health
    blank.moveSet(00, 00, 00, 00);//move1, move2, move3, move4
}

当我在第一行调用 callCubes 时,我无法弄清楚为什么在当前上下文中没有定义空白。

编辑:https://github.com/Mooseymax/Pocket-Cube/blob/master/source%20cs/Program.cs

【问题讨论】:

    标签: c# object methods


    【解决方案1】:

    您没有在您发布的源代码中的任何地方声明名为 cube1 的对象。

    您可以修改您的程序,让 callCubes() 返回它在本地分配和初始化的多维数据集,并将该返回值分配给存在于 Main() 范围内的对象:

    static void Main(string[] args)
    {
        //call all cube base details into existance.
        cube cube1 = callCubes();
    
        //Test Output
        Console.WriteLine("Name: " + cube1.name);
        Console.WriteLine("Health: " + cube1.health);
        Console.WriteLine("Attack: " + cube1.attack);
        Console.WriteLine("");
        Console.ReadKey();
    }
    
    static cube callCubes()
    {
        cube blank = new cube();
        blank.base_stats(00, "Blank", 0, 0, 0, 0, 0, 0.00); //id, name, atk, def, speed, sp. atk, sp. def, health
        blank.ev_stats(0, 0, 0, 0, 0, 0.00); //atk, def, speed, sp. atk, sp. def, health
        blank.moveSet(00, 00, 00, 00);//move1, move2, move3, move4
    
        return blank;
    }
    

    请注意,按照惯例,像 Cube 这样的类名和像 CallCubes() 这样的方法名应该是 PascalCased,而不是 camelCased。

    【讨论】:

    • 你错过了return blank;
    • 嗯,我可以看到这对少量是如何工作的,但是如果我在 callCubes 方法中定义了多个“立方体”实例,这将如何应用? - 也不适切换到 PascalCased 以供将来工作!
    • @juharr:谢谢,已修复。
    • @mooseymax:返回IEnumerable<cube>
    • 谢谢,埃里克,今晚我会研究一下,如果有效,请告诉您。
    【解决方案2】:

    在阅读了您希望一次拥有多个立方体之后,为什么不将测试输出与方法一起放入?

    static void callCubes()
    {
        cube blank = new cube();
        blank.base_stats(00, "Blank", 0, 0, 0, 0, 0, 0.00); //id, name, atk, def, speed, sp. atk, sp. def, health
        blank.ev_stats(0, 0, 0, 0, 0, 0.00); //atk, def, speed, sp. atk, sp. def, health
        blank.moveSet(00, 00, 00, 00);//move1, move2, move3, move4
    
        //Test Output
        Console.WriteLine("Name: " + blank.name);
        Console.WriteLine("Health: " + blank.health);
        Console.WriteLine("Attack: " + blank.attack);
        Console.WriteLine("");
        Console.ReadKey();
    }
    

    你不能真正同时陈述两个立方体的统计数据......

    【讨论】:

    • 我确实考虑过这一点,它会工作得很好,但是虽然它适用于测试,但当我想稍后在另一种方法中引用多维数据集时,我看不到它的工作原理线? - github.com/Mooseymax/Pocket-Cube/blob/master/source%20cs/…
    • 稍后我将使用此信息更新答案,但是,我认为您可能应该将多维数据集存储在一个数组中,然后您可以运行一个循环来遍历数组并说明每个多维数据集的统计信息.
    猜你喜欢
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 2012-05-01
    • 2019-07-29
    • 2015-02-05
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    相关资源
    最近更新 更多