Могу ли я получить доступ к тому же статическому методу, который используется другим пользователем? - PullRequest
0 голосов
/ 21 ноября 2011

У меня есть этот статический метод на C #:

public class MyClass
{
    public MyClass()
    {

    }

    public static void myOwnMethod(int myValue)
    {
        int internalValue;
        internalValue=myValue+10;
        Console.Write(internalValue);
    }
}

Теперь, если пользователь A вызывает MyClass.myOwnMethod (), пользователь B может вызывать тот же метод, который вызывается пользователем A (является статическим) или когда пользовательВ вызове этого метода, который он хотел бы создать еще один «экземпляр» класса / метода?

Потому что может быть опасно иметь статические методы, так что ...

ПРИМЕР

  • userA вызывает MyClass.myOwnMethod (10);
  • , если Console.Write пользователя A userB вызывает MyClass.myOwnMethod (20), каковы результаты для каждого пользователя?

userAполучить 20 и userB 30 или оба получить 30?

Ответы [ 7 ]

3 голосов
/ 21 ноября 2011

если пользователь A вызовет MyClass.myOwnMethod (), может ли пользователь B вызвать тот же метод

Да, конечно.

Но что именно происходит, зависит.Ваши потоки «Пользователи» или они запускают отдельные экземпляры программы?

После обновления

Когда вы вызываете статический метод для 2+ пользователей (запросов) в серверном приложении, тогдавнутри этого метода должен быть потокобезопасным.В данном примере это так, потому что

  • internalValue является локальной переменной
  • Console.Write() является поточно-ориентированной.

Но в «реальной» ситуации у вас возникнет соблазн использовать общие (статические) данные, а затем вам потребуется некоторая форма блокировки.

1 голос
/ 21 ноября 2011

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

1 голос
/ 21 ноября 2011

На ваш вопрос: Да, любой может вызвать статический метод одновременно

Для вашего примера: в вашем текущем случае userA и userB получат результат в качестве аспекта,

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

1 голос
/ 21 ноября 2011

Я не знаю, что вы имеете в виду, говоря, пользователь А и пользователь Б?

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

При вызове статического метода не используется экземпляр класса.

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

1 голос
/ 21 ноября 2011

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

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

1 голос
/ 21 ноября 2011

Статические методы работают с типом, а не с экземпляром. Так что да, любой пользователь может вызвать ваш Static myOwnMethod ().

1 голос
/ 21 ноября 2011

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

Вы можете сделать статику классов, если вы уверены, что ваши объекты / классы не статичны

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...