我可以访问其他用户使用的相同静态方法吗?
本文关键字:静态方法 访问 其他 用户 我可以 | 更新日期: 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在一个进程中使用静态方法,是的,它们共享该方法。但是,如果它们在不同的进程中使用共享类,则不会共享静态方法。