我可以访问其他用户使用的相同静态方法吗?

本文关键字:静态方法 访问 其他 用户 我可以 | 更新日期: 2023-09-27 18:15:20

我在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调用的相同方法(是静态的),或者当用户B调用该方法时,它喜欢创建另一个"实例";类/方法?

因为使用静态方法可能很危险所以…

    userA call MyClass.myOwnMethod(10);
  • 如果同时控制台。写userA userB调用MyClass.myOwnMethod(20),每个用户的结果是什么?

userA获得20和userB 30或两者都获得30?

我可以访问其他用户使用的相同静态方法吗?

如果用户A调用MyClass.myOwnMethod(),用户B是否可以调用相同的方法

当然可以。

但具体发生什么取决于。你的"用户"线程还是他们运行程序的单独实例?

更新后

当您在服务器应用程序中为2+用户(请求)调用静态方法时,该方法的内部应该是线程安全的。在这个例子中,因为

  • internalValue是一个局部变量
  • Console.Write()的设计是线程安全的。

但是在"真实"的情况下,您可能会尝试使用共享(静态)数据,然后您将需要某种形式的锁定。

是的,这是可能的。您应该避免以这种方式使用静态方法。我自己在登录类中犯了这个错误,我的同事接管了我的用户配置文件。

你可以让你的类是静态的,只要你确保你的数据对象/类不是静态的

静态方法作用于类型而不是实例。是的,任何用户都可以调用静态myOwnMethod()

您没有提到如何访问这些方法,但是静态方法不会重复,因此两个用户将调用完全相同的代码。这取决于开发人员如何防止由此导致的竞态条件。

请阅读MSDN上每个开发人员必须了解的多线程应用程序,以了解更多关于我的意思。我向你保证这篇文章绝对值得一读。

我不知道你说用户A和用户B是什么意思?

在多线程方面:静态方法可以由多个线程同时调用。我想这就是你说的。

调用静态方法时不涉及类实例。

你必须以线程安全的方式在你的方法中编写代码:同步访问全局或静态数据是很重要的。

对于您的问题:是的,任何人都可以同时调用静态方法

对于您的示例:在您当前的情况下,userA和userB将获得结果作为它们的方面,

但是如果你的方法的参数是对象类型,它不能这样说。也许它不是线程安全的

这完全取决于用户A和用户B的类的作用域。如果用户A和用户B在一个进程中使用静态方法,是的,它们共享该方法。但是,如果它们在不同的进程中使用共享类,则不会共享静态方法。