ASP.NET 静态方法特性

时间:2020-12-10 19:29:43
大家好!我想请教一个关于静态方法的问题:场景是这样的一个业务类的方法是静态的并定义了一个形参,方法内部读取该参数并进行逻辑计算等,那么在多个用户访问并调用该静态方法时是否会出现读取参数值冲突问题?即相互影响?

4 个解决方案

#1


如果不是在线程中操作,对于访问没问题,但是对于后续的操作,这个值就是不确定的了,很有可能已经不是你要的值了

#2


引用 1 楼 bdmh 的回复:
如果不是在线程中操作,对于访问没问题,但是对于后续的操作,这个值就是不确定的了,很有可能已经不是你要的值了


那么我们经常使用DbHelperSQL帮助类它定义的都是静态方法的是否意味着也会有问题?

#3


只要你遵循“迪米特法则”法则编写就可以

引用
狭义的迪米特法则
如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中的一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。
朋友圈的确定
“朋友”条件:
1)当前对象本身(this)
2)以参量形式传入到当前对象方法中的对象
3)当前对象的实例变量直接引用的对象
4)当前对象的实例变量如果是一个聚集,那么聚集中的元素也都是朋友
5)当前对象所创建的对象
任何一个对象,如果满足上面的条件之一,就是当前对象的“朋友”;否则就是“陌生人”。


所以基于上面的原则,你的提问“场景是这样的一个业务类的方法是静态的并定义了一个形参,方法内部读取该参数并进行逻辑计算等,那么在多个用户访问并调用该静态方法时是否会出现读取参数值冲突问题”
答案是不会冲突,因为他是外部传递进来的,不是公用的资源。(如果你依赖的是公用资源那就另外一说,公用资源比如相同的对象,相同的文件,相同的静态变量,那就是非线程安全的东西)

#4


引用
那么我们经常使用DbHelperSQL帮助类它定义的都是静态方法的是否意味着也会有问题?


这得看他们依赖什么,如果这些方法里面依赖了全局性静态属性,那么这些静态方法就是非线程安全的(如果代码本身没有做其他线程保护的话)

#1


如果不是在线程中操作,对于访问没问题,但是对于后续的操作,这个值就是不确定的了,很有可能已经不是你要的值了

#2


引用 1 楼 bdmh 的回复:
如果不是在线程中操作,对于访问没问题,但是对于后续的操作,这个值就是不确定的了,很有可能已经不是你要的值了


那么我们经常使用DbHelperSQL帮助类它定义的都是静态方法的是否意味着也会有问题?

#3


只要你遵循“迪米特法则”法则编写就可以

引用
狭义的迪米特法则
如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中的一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。
朋友圈的确定
“朋友”条件:
1)当前对象本身(this)
2)以参量形式传入到当前对象方法中的对象
3)当前对象的实例变量直接引用的对象
4)当前对象的实例变量如果是一个聚集,那么聚集中的元素也都是朋友
5)当前对象所创建的对象
任何一个对象,如果满足上面的条件之一,就是当前对象的“朋友”;否则就是“陌生人”。


所以基于上面的原则,你的提问“场景是这样的一个业务类的方法是静态的并定义了一个形参,方法内部读取该参数并进行逻辑计算等,那么在多个用户访问并调用该静态方法时是否会出现读取参数值冲突问题”
答案是不会冲突,因为他是外部传递进来的,不是公用的资源。(如果你依赖的是公用资源那就另外一说,公用资源比如相同的对象,相同的文件,相同的静态变量,那就是非线程安全的东西)

#4


引用
那么我们经常使用DbHelperSQL帮助类它定义的都是静态方法的是否意味着也会有问题?


这得看他们依赖什么,如果这些方法里面依赖了全局性静态属性,那么这些静态方法就是非线程安全的(如果代码本身没有做其他线程保护的话)