gpt4 book ai didi

c# - 如何在C#类的构造函数中生成一个随机数

转载 作者:太空宇宙 更新时间:2023-11-03 17:34:46 27 4
gpt4 key购买 nike

我知道在 C# 中调用类的构造函数中的方法不是一个好习惯,但我遇到了一些奇怪的事情。我的问题是,当我创建我的类的一个对象时,我需要在我的对象中分配一个随机数的字段。

例如

class RandomNumberHandler
{
private int randomNumber;
public RandomNumberHandler()
{
this.randomNumber = GenerateRandomNumber();
}

private int GenerateRandomNumber()
{
return (new Random()).Next(3000) + 1000;
}
}

在我的例子中,我需要一个四位数的数字。我想在创建对象的类中生成随机数并将其作为参数传递给构造函数,但在另一个类中生成随机数似乎也不是一个好主意,因为我试图实现强内聚为我的课。我正在为我大学的“高质量代码”类(class)做这件事,我正在寻找最好的方法。欢迎任何关于如何做到这一点的想法:)

最佳答案

首先:在构造函数中调用非虚拟方法没有错。你在哪里读到的? (注意:调用虚拟方法可能是一个问题;这不是自动的禁忌,但您需要非常小心地观察您正在做的事情)。

顺便说一句,每次调用 GenerateRandomNumber 时都生成一个新的 Random 实例似乎很浪费。您可以将 Random 实例提取到一个字段中以解决此问题:

class RandomNumberHandler
{
private readonly Random random = new Random();
private int randomNumber;

public RandomNumberHandler()
{
this.randomNumber = GenerateRandomNumber();
}

private int GenerateRandomNumber()
{
return this.random.Next(3000) + 1000;
}
}

但这引发了另一个问题:如果 GenerateRandomNumber 在每个实例的生命周期中(在构造函数中)只被调用一次,那么创建一个新的 Random 就没有意义了> 对于每个对象。因此,下一个合乎逻辑的步骤是使 random 成为 static。这意味着 GenerateRandomNumber 也可以变为 static(事实上,它必须如此):

class RandomNumberHandler
{
private static readonly Random Random = new Random();
private int randomNumber;

public RandomNumberHandler()
{
this.randomNumber = GenerateRandomNumber();
}

private static int GenerateRandomNumber()
{
return Random.Next(3000) + 1000;
}
}

关于c# - 如何在C#类的构造函数中生成一个随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5422141/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com