Если бы вы могли выбрать только один, то повторный запуск был бы правильным.Но существует причина, по которой существует общий доступ, и лучше понять ее, чтобы вы могли использовать ее надлежащим образом.
Допустим, у вас есть функция, которая просто возвращает все записи в базе данных, тогда было бы неплохо поместить ее вобщий класс.И скажем, у этой функции есть параметр, который позволяет вам указать одну запись, которую вы хотите вернуть.В этом случае вы все еще в безопасности, потому что каждый вызов функции будет добавлять еще один кадр в стек и отслеживать переменные для этого кадра отдельно.
Однако, если вы начнете работать с переменной-членом класса в вашей функции, тогда вы можете столкнуться с проблемами.Допустим, ваш класс использует переменную-член, которая содержит количество строк на странице для отображения.Каждый раз, когда пользователь меняет свои предпочтения, это влияет на всех пользователей.
Итак, я надеюсь, что это немного прояснит для вас.
Редактировать: В ответ на ваш вопрос ...
Рассмотрим класс MessageBox.Как вы знаете, вам не нужно создавать его экземпляр, чтобы использовать его методы.И если к его методу Show (string text) одновременно делается два вызова, вам не нужно беспокоиться о том, что второй вызов перезаписывает сообщение, переданное первым, потому что каждый вызов метода поддерживает свой собственный набор переменных.
Однако рассмотрим следующий класс:
public static class MyMessageBox
{
public static string Message { get; set; }
public static void Show()
{
MessageBox.Show(MyMessageBox.Message);
}
}
Обратите внимание на несколько вещей об этом классе: 1) Show должен получить доступ к свойству Message через ссылку на статический класс MyMessageBox.Он не может ссылаться на него как «this.Message», потому что нет фактического экземпляра класса и, следовательно, нет такого понятия, как «this».
2) Поскольку это статический класс, все свойства / полядолжен быть объявлен как статический.Однако не поймите неправильно, что у вас также может быть нестатический класс со статическими переменными и методами.С функциональной точки зрения, статический класс не меняет черты поведения вашего кода ... он лишь заставляет компилятор применять определенные правила в вашем классе.
Создание статического метода позволяет вам вызывать его как MyClass.SomeMethod () вместо instanceOfMyClass.SomeMethod ().Это только разница в синтаксисе.В действительности все методы всегда статичны (т. Е. Никогда не бывает нескольких экземпляров кода вашего метода ... он находится только в одном месте. Это переменные, которые создаются).В дополнение к разнице в синтаксисе создание статического метода также обеспечивает соблюдение правил, не позволяющих вам ссылаться на любые нестатические свойства / поля, что имеет смысл, поскольку вы не вызываете его из фактического экземпляра вашего объекта.
3) Самое главное, обратите внимание, что это был бы ужасный способ создать этот класс.Если к классу сделано два вызова, возможно, что один человек может установить для свойства Message значение «Hello», а кто-то другой может установить для него значение «World», прежде чем первый человек отобразит свое сообщение.Затем каждый человек вызывает метод Show (), и вы получаете два окна сообщения с надписью «Мир».
Бывают случаи, когда такой дизайн нужен, и вам приходится использовать многопоточные методы, чтобыпоследующие абоненты ждут в очереди, чтобы использовать определенный ресурс.Но для чего-то столь же простого, как это, это было бы просто смешно.