C# 管理静态属性的最佳方法
我有以下代码:C# 管理静态属性的最佳方法,c#,static,thread-safety,C#,Static,Thread Safety,我有以下代码: public static class ProcessClass() { public static string MyProp {get;set;} public static void ProcessMethod(InputObject input) { if(String.IsNullOrEmpty(MyProp) MyProp = input.Name(); //do stu
public static class ProcessClass()
{
public static string MyProp {get;set;}
public static void ProcessMethod(InputObject input)
{
if(String.IsNullOrEmpty(MyProp)
MyProp = input.Name();
//do stuff
MyProp = null;
}
}
现在,除了MyProp
之外的一切都已经就绪。我需要一种方法在整个代码中跟踪原始的输入.Name
,因为它可以更改,而且ProcessMethod
可能会在内部使用不同的输入.Name
值进行调用,这是由于业务规则,我需要声明第二次调用来自input.Name
显然,这是不好的,因为如果两个人同时这样做,他们都将共享相同的MyProp
值,并且在最后简单地将is null设置为null似乎是危险的和令人讨厌的。我真的没有选择将这个方法更改为非静态的,因为这将涉及更改大量的代码库,而这实际上不是一个选择
使用静态属性,但仍然能够保留原始的input.Name
值,而不冒线程安全问题的风险,有哪些方法可以避免?我想的一个选择是让每个方法都接受一个输入。Name()
,track就是这样(并删除MyProp
),但我可以想象,这会很快失控,而且非常混乱
我不需要将其作为属性,但如果它是属性,则显然需要在此类中是静态的。因为它可能是一个多用户环境,然后将该字符串替换为
ConcurrentDictionary
,您可以将输入.Name()
存储为值和键作为用户的唯一标识符(id、名称等)。因为它可能是一个多用户环境,所以用ConcurrentDictionary
替换字符串,在这里您将input.name()
存储为值和键作为用户的唯一标识符(id、名称等).我不知道这个问题的答案,但我强烈建议将MyProp
或任何类似的解决方案设置为private
,而不是public
。这样至少可以消除它被ProcessClass
之外的任何方法更改的可能性,从而降低失败的可能性基本上是这样。一般来说,这似乎是一个更大的设计问题的一部分。我不知道这个问题的答案,但我强烈建议您使用MyProp
或任何类似的解决方案,而不是public
。这样至少可以消除它被任何人更改的可能性方法,从而大大降低失败的可能性。一般来说,它似乎是更大设计问题的一部分。