C# 使用参数时可以使用静态方法吗?

C# 使用参数时可以使用静态方法吗?,c#,asp.net,static-methods,static-members,C#,Asp.net,Static Methods,Static Members,我理解,在ASP.Net或任何其他基于.Net的系统中,静态成员可能会导致并发问题,在这些系统中,多个用户将访问和使用相同的线程 我的问题是,当我在上下文中作为参数传递时,使用静态方法是否安全。例如: public class BL { public static List<DocumentType> GetAllActiveDocumentTypesForMyDeparment(int CurrentDepartment) { return Data

我理解,在ASP.Net或任何其他基于.Net的系统中,静态成员可能会导致并发问题,在这些系统中,多个用户将访问和使用相同的线程

我的问题是,当我在上下文中作为参数传递时,使用静态方法是否安全。例如:

public class BL
{
    public static List<DocumentType> GetAllActiveDocumentTypesForMyDeparment(int CurrentDepartment)
    {
        return Data.DAL.GetAllActiveDocumentTypesForMyDeparment(CurrentDepartment).Where(s => s.IsActive)
            .OrderBy(s => s.DocumentTypeDisplayName).ToList();
    }
}
上述情况是否会导致并发问题?请注意,我的DAL也使用静态方法

我知道有很多关于静态vs实例的文章,我读过很多,但是我发现真正理解某些东西的最好方法是编写代码并测试它。谢谢

我理解,在ASP.Net或任何其他基于.Net的系统中,静态成员可能会导致并发问题,在这些系统中,多个用户将访问和使用相同的线程

只有当它修改了共享状态,或者执行了某种同步时

我的问题是,当我在上下文中作为参数传递时,使用静态方法是否安全

当然。它不像其他线程会看到该参数或访问它。当然,您必须在静态方法中执行线程安全工作,但仅此而已


我建议您回到那些认为静态成员会导致并发性问题的来源,并真正尝试理解这种情况发生的时间和原因。这绝对不是一个不需要进一步考虑就可以应用的总括规则。

到目前为止,此代码段实际上取决于Data.Dal.getAllActivateDocumentTypesFormyDepartment是否是线程安全的。您不能将数据作为参数传入。所以不,这不是一个解决方案。谢谢你的回答,Jon,谢谢你的快速回答。您是否有一个模板可以回答:-。无论如何,我的参数是从会话状态中读取的,我知道它是每个用户的状态,所以我想我将继续我的实现。