Статический метод путаницы - PullRequest
3 голосов
/ 21 октября 2010

Я работаю с Asp.NET, и у меня есть класс с именем PathFinder, который имеет методы, подобные StyleBarPath(string BrandId,string ProductId), который возвращает, например, комбинацию путей, включающую brandId и productId, а также есть такие методы втот же класс.

Что я думаю, чтобы сделать их static методами, чтобы легко вызывать их в любом месте, говоря PathFinder.StylePath("1","2");, чтобы использовать возвращаемые значения внутри <a href=""></a> пользовательского элемента управления.

Но поскольку я слишком много работаю в эти дни, то, что я знаю, становится сложным по ряду причин.В любом случае, вот мой вопрос:

Поскольку я использую встроенное кодирование во многих местах, таких как <a href='<%=PathFinder.StylePath("1","2")%>'></a>, я не хочу создавать множество экземпляров, выполняя это <a href='<%=new PathFinder().StylePath("1","2")%>'></a>, объявляя методыне статично.

Но я боюсь, что изменение методов возвращает значения, потому что определение методов статическое.Я имею в виду, что когда клиент вызывает этот метод, это не повлияет на других клиентов, которые вызывают тот же метод в одно и то же время?

У них будут разные стеки вызовов, верно?

Давайте скажем:

  • клиент один вызывает метод с этими параметрами - {brandId:2,productId:3}
  • клиентский эвакуатор вызывает метод с этими параметрами - {brandId:3,productId:4}

Это действие происходит примерно в то же время, когда сервер обрабатывает свои запросы. Я хочу узнать, влияют ли вызовы друг на друга и изменяют ли возвращаемые значения друг друга, так как они определены как статические.

Спасибо за чтение и помощник:)

Я просто не хочу, чтобы клиенты видели path/1/2/, пока они ожидают path/2/3/

Некоторые замечания по вопросу:

  • Это то же самоедля статических полей?

Ответы [ 3 ]

7 голосов
/ 21 октября 2010

Вы можете безопасно вызывать статический метод из нескольких потоков одновременно и в разное время, учитывая следующее:

  • Статический метод не обращается к переменным вне себя, или эти переменные также поточно-ориентированы.
  • Статический метод не создает побочных эффектов, которые не являются потокобезопасными.

Если ваш метод такой, какой он есть, вы просто берете некоторые входные данные, регулируя ихвозвращая результат без доступа к чему-либо вне функции.Это было бы совершенно безопасно.

Статические поля совсем не совпадают с методами.Это одна копия переменной.Любые изменения в этом статическом поле будут влиять на все остальное, которое его использует.

1 голос
/ 21 октября 2010

Это должно ответить на большинство из вас вопросов http://odetocode.com/Articles/313.aspx

Насколько я понимаю, статические методы являются потокобезопасными, но не статическими свойствами

1 голос
/ 21 октября 2010

В C #, статический означает (в терминах непрофессионала) есть одна копия.Если вы передадите аргументы методу и вернете значение только на основе этих параметров, то вы будете в полной безопасности.

Единственный раз, когда вы можете столкнуться с проблемами, это если ваш статический метод использует какие-либо статические переменные дляхранить данные между вызовами, так как это может заставить call-1 изменить значение call-2.

Из приведенного вами примера вы в безопасности.

Что касается вашего вопроса о статических полях,каждый вызывающий может видеть те же статические поля, так как они совместно используются экземплярами.Имейте это в виду при программировании!

...