我试图只对一个随机变量进行初始化,让我们说' rnd'。因此,如果从我的程序的许多点调用它,那么随机变量将不会再次初始化,只是第一次。
所以我创建了一个单例,但我不知道如何只调用一次Random()。
public sealed class Randomize
{
private static Randomize instance = null;
private static readonly object padlock = new object();
Randomize()
{
}
public static Randomize Instance
{
get
{
lock (padlock)
{
if (instance == null)
{
instance = new Randomize();
}
return instance;
}
}
}
}
在这个课程中,我想创建一个私有的只读随机变量' rnd',它首次初始化为第一次:
Random rnd = new Random()
然后,我想创建一个属性来读取它的值,例如:
public Random Rnd
{
get { return rnd; }
}
我不想允许更改其值,因为它只是第一次分配,所以我只希望该属性是readonly(get),而不是设置。
因此,从我的计划的许多方面来看,我可以做到:
private readonly Random rnd;
Random rnd = Randomize.Instance.Rnd;
但是每当我使用上面的表达式调用它时,我不想再次启动随机变量(通过执行新的Random()),而是希望始终获得与第一次初始化rnd变量相同的值。
关于如何做的任何想法?
答案 0 :(得分:2)
只需使用一个静态构造函数,根据定义只能被调用一次
MSDN文件状态:
静态构造函数用于初始化任何静态数据,或执行仅需要执行一次的特定操作。在创建第一个实例或引用任何静态成员之前会自动调用它。
public sealed class Randomize
{
private static Randomize instance = null;
private static readonly object padlock = new object();
public Random GetRandom { get { return rnd; } }
private static readonly Random rnd;
static Randomize()
{
rnd = new Random();
}
}
答案 1 :(得分:1)
您可以使用以下代码段访问Randomize.Random
,并始终返回曾经初始化的Random rnd
字段。
public sealed class Randomize {
private static readonly Random rnd = new Random();
public static Random Random {
get {
return rnd;
}
}
}
答案 2 :(得分:0)
可以在构造函数中分配只读变量,所以我会去那条路。
public sealed class Randomize {
/* access level here */ Random rnd { get { return r; } }
private readonly Random r;
static Randomize() {
r = new Random();
}
}
// or
private readonly Random r = new Random();
public Random rnd {
get {
return r;
}
}