我知道在C#中的类的构造函数中调用方法不是一个好习惯,但我坚持了一些奇怪的想法。我的问题是,当我创建类的对象时,我需要为对象中的字段分配一个随机数。
例如
class RandomNumberHandler
{
private int randomNumber;
public RandomNumberHandler()
{
this.randomNumber = GenerateRandomNumber();
}
private int GenerateRandomNumber()
{
return (new Random()).Next(3000) + 1000;
}
}
就我而言,我需要一个四位数的数字。我想在要创建对象的类中生成随机数,并将其作为参数传递给构造函数,但在其他类中生成随机数似乎也不是一个好主意,因为我正试图实现强大的凝聚力我的课。我正在为我大学的“高质量代码”课程而做,我正在寻找最好的方法。任何想法如何做到这一点,欢迎:)
最佳答案
首先,在构造函数中调用非虚拟方法没有错。你在哪里看的? (注意:调用虚拟方法可能是一个问题;这不是自动禁止,但您需要非常仔细地观察正在做的事情)。
顺便说一句,每次调用Random
都生成一个新的GenerateRandomNumber
实例似乎很浪费。您可以将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/