在c#中使用另一个类函数

时间:2017-12-08 01:58:59

标签: c# function methods dice

我试图能够从dieclass调用函数并在matchplay类中使用roll数量...这可能吗?

public class DieClass
{
    public void DiceRoll(int min, int max)
    {
        Random random = new Random();

        int roll1 = random.Next(0, 6);
        int roll2 = random.Next(0, 6);
        int roll3 = random.Next(0, 6);
    }
}

public class MatchPlay
{
    public void Match()
    {
        DieClass.DiceRoll();

        Console.WriteLine("Starting Match Play...");
        Console.WriteLine();
        Console.WriteLine("Round One");
        Console.WriteLine("Your first dice is [0]", roll1);
        Console.WriteLine("Your second dice is [0]", roll2);
        Console.WriteLine("Your third dice is [0]", roll3);
    }
}

}

2 个答案:

答案 0 :(得分:4)

有一些事情需要修复':

  • 您的DiceRoll方法是一种实例方法,因此您需要创建DiceClass类的实例才能使用它。
  • roll1roll2roll3变量是方法的本地变量,因此一旦方法完成,您将无法使用它们。相反,您可以将它们作为类的公共属性。
  • 每次调用该方法时都不需要实例化一个新的Random(实际上这会导致问题,因为Random的种子基于系统时钟,所以如果你的方法被非常快速地调用,它将反复产生相同的数字)。您可以将其设置为静态并将其实例化一次。
  • 由于您正在接受min方法的maxRoll参数,我们是否应该使用它们?您目前有06硬编码。
  • 要使用格式字符串,您需要使用curley括号({})而不是方括号([])。
  • 最后,从命名约定的角度来看,您不需要单词Class作为类名的一部分,并且您不需要Dice作为方法名称的一部分。这将简化打字的数量,并且仍然可以理解。

您可能会考虑做的是创建一个代表单个Die对象的类,并为其提供Roll()方法和Value属性。然后,用户可以创建任意数量的内容并将其保存在列表中:

public class Die
{
    public int Value { get; set; }

    // Make this static and instantiate it only once to avoid re-seeding issues
    private static readonly Random rnd = new Random();

    public Die()
    {
        Value = 1;
    }

    public void Roll()
    {
        // This method uses values 1-6 as a standard die
        Roll(1, 6);
    }

    public void Roll(int minValue, int maxValue)
    {
        Value = rnd.Next(minValue, maxValue + 1);
    }
}

现在,您可以使用Die类,如下所示:

public class MatchPlay
{
    public void Match()
    {
        // Add three Die objects to our list of dice
        List<Die> dice = new List<Die>
        {
            new Die(), new Die(), new Die()
        };

        Console.WriteLine("Starting Match Play...");
        Console.WriteLine();
        Console.WriteLine("Round One");

        // Roll all dice
        dice.ForEach(d => d.Roll());

        Console.WriteLine("Your first dice is {0}", dice[0].Value);
        Console.WriteLine("Your second dice is {0}", dice[1].Value);
        Console.WriteLine("Your third dice is {0}", dice[2].Value);
    }
}

最后,我们可以使用Main方法启动匹配:

private static void Main()
{
    MatchPlay game = new MatchPlay();
    game.Match();

    Console.WriteLine("\nDone!\nPress any key to exit...");
    Console.ReadKey();
}

答案 1 :(得分:2)

您需要制作DiceRoll static方法,或创建DieClass的实例并通过该方法调用您的方法。

例如,您可以将方法声明为

public static void DiceRoll(int min, int max)

或者您可以实例化一个对象:

DieClass dice = new DieClass();

dice.DiceRoll(0, 6);

话虽这么说,你的DieClass课还有其他问题,其中最明显的就是你需要一种方法将结果传回呼叫者。最简单的方法是让DiceRoll()生成一个结果并返回。此外,您已将06硬编码为random.Next()的参数,尽管该方法需要一对参数minmax