Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以访问其他用户使用的相同静态方法吗?_C#_Asp.net_Methods_Static - Fatal编程技术网

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

C# 我可以访问其他用户使用的相同静态方法吗?,c#,asp.net,methods,static,C#,Asp.net,Methods,Static,我在C#上有一个静态方法: 现在,如果用户A调用MyClass.myOwnMethod(),用户B是否可以调用用户A调用的相同方法(是静态的),或者当用户B调用该方法时,它是否可以创建类/方法的另一个“实例” 因为使用静态方法可能会很危险,所以 例子 userA调用MyClass.myown方法(10) 如果同时userA userB的Console.Write调用MyClass.myOwnMethod(20),那么每个用户的结果是什么 用户A得到20和用户B 30,或者两者都得到30 如果

我在C#上有一个静态方法:

现在,如果用户A调用MyClass.myOwnMethod(),用户B是否可以调用用户A调用的相同方法(是静态的),或者当用户B调用该方法时,它是否可以创建类/方法的另一个“实例”

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

例子
  • userA调用MyClass.myown方法(10)
  • 如果同时userA userB的Console.Write调用MyClass.myOwnMethod(20),那么每个用户的结果是什么
用户A得到20和用户B 30,或者两者都得到30

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

当然可以

但具体发生什么取决于具体情况。您的“用户”线程是运行单独的程序实例还是运行单独的程序实例

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

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

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

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


只要确保dataobjects/类不是静态的,就可以使类成为静态的

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

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


请阅读MSDN以了解我的意思。我保证这篇文章绝对值得一读。

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

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

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


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

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

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


但如果方法的参数是对象类型,我不能这么说。可能它不是线程安全的

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

Winforms?网络表单?用户是否使用相同的程序实例?如何限制用户?我根本不知道如何阻止用户调用您的代码。请解释在这个上下文中“用户”是什么。添加的示例或我的意思!也许更清楚:)@Oded:我从一个aspx.cs(web应用程序)调用这些方法,添加了我的意思!看看,我不明白最后一步。当然,如果我通过静态对象,他们将编辑相同的对象。。。但如果我传递新对象(或者我将新对象实例传递到方法中),它们将无法访问同一对象。(作为int internalValue的例子)…是的,但是如果在方法中我使用非静态对象,userB不应该与userA交互,对吗?这就是我需要的。。。!取决于你如何与非静态的东西互动。有很多可能性。
public class MyClass
{
    public MyClass()
    {

    }

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