【发布时间】:2012-02-23 16:23:34
【问题描述】:
为什么这段代码对两个方法调用产生相同的输出?我会假设因为一种方法是普通的公共方法并且是从实例调用的,那么它会为静态方法调用生成一个不同的随机数,因为实例与为静态方法调用创建的实例是分开的?
class ClassWithStaticMembers
{
public static int ReturnAnIntStatic()
{
Random random = new Random();
return random.Next();
}
public int ReturnAnInt()
{
Random random = new Random();
return random.Next();
}
}
class Program
{
static void Main(string[] args)
{
ClassWithStaticMembers classWithStaticMembers = new ClassWithStaticMembers();
//We can do this because the method is declared static.
Console.WriteLine(ClassWithStaticMembers.ReturnAnIntStatic());
//This can be used as we have not declared this method static
Console.WriteLine(classWithStaticMembers.ReturnAnInt());
Console.ReadKey();
}
}
输出如下:
12055544 12055544
有人能解释一下为什么使用类实例的方法调用会产生与静态方法的方法调用相同的结果吗?为方法调用生成的实例是否不同?
编辑:除此之外。是用于调用公共方法的 ClassWithStaticMembers 的实例,与静态调用分开。我的意思是,如果编译器识别出我稍后在文件中调用同一个类,它会再次使用相同的实例吗?
【问题讨论】: