静态方法混淆

时间:2010-10-21 18:20:18

标签: c# asp.net static-methods

我正在使用Asp.NET,我有一个名为PathFinder的类,它有StyleBarPath(string BrandId,string ProductId)之类的方法,例如返回路径的组合,包括brandIdproductId并且同一类中也有这样的方法。

通过说static使用PathFinder.StylePath("1","2");用户控件中的返回值,我想让他们<a href=""></a>方法在每个地方轻松调用它们。

但是由于我这些天工作太多,我所知道的是因为某些原因而变得复杂。无论如何,这是我的问题:

由于我在很多地方使用内联编码,例如<a href='<%=PathFinder.StylePath("1","2")%>'></a>,我不想通过声明方法非静态来执行此<a href='<%=new PathFinder().StylePath("1","2")%>'></a>来创建大量实例。

但我害怕更改方法返回值,因为定义方法static。我的意思是当客户端调用此方法时,它不会影响同时调用相同方法的其他客户端吗?

他们会有不同的调用堆栈吗?

让我们说:

  • 客户端1使用这些参数调用方法 - {brandId:2,productId:3}
  • 客户端拖动使用这些参数调用方法 - {brandId:3,productId:4}

此操作几乎在服务器处理其请求的同时发生。 我想要了解的是调用是否会影响彼此并且更改彼此的返回值,因为它们被定义为静态。

感谢您到目前为止阅读并成为帮助者:)

我只是不希望客户在等待path/1/2/时看到path/2/3/

关于这个问题的一些注释:

  • 静态字段是否相同?

3 个答案:

答案 0 :(得分:7)

您可以同时从多个线程安全地调用静态方法,并在不同的时间给出以下内容:

  • 静态方法不会访问自身之外的变量,或者这些变量也是线程安全的。
  • 静态方法不会产生非线程安全的副作用。

如果您的方法看起来像是这样,那么您只需要调整一些输入并返回结果而不访问函数之外的任何内容。这将是完全安全的。

静态字段与方法完全不同。它是变量的一个副本。对该静态字段的任何更改都将影响使用它的所有其他内容。

答案 1 :(得分:1)

在C#中,静态意味着(通俗地说)有一个副本。 如果您为方法提供参数,并且仅基于这些参数返回值,那么您将非常安全。

唯一可能遇到问题的方法是静态方法使用任何静态变量来在调用之间存储数据,因为这可能会使call-1更改call-2的值。

从你给出的例子中,你是安全的。

关于静态字段的问题,每个调用者都可以看到相同的静态字段,因为这些字段在实例之间共享。编程时请记住这一点!

答案 2 :(得分:1)

这应该回答大多数问题 http://odetocode.com/Articles/313.aspx

据我了解,静态方法是线程安全的,但不是静态属性