Почему этот код выдает одинаковый вывод для обоих вызовов метода? Я бы предположил, что, поскольку один метод является обычным общедоступным методом и вызывается из экземпляра, он генерирует другое случайное число для вызова статического метода, поскольку экземпляр отделен от того, который создан для вызова статического метода?
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, используемый для вызова открытого метода, отдельного от статического вызова. Под чем я подразумеваю, будет ли компилятор снова использовать тот же экземпляр, если он узнает, что я делаю вызов тому же классу позже в файле?