Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.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#_Oop - Fatal编程技术网

C# 公共静态只读对象

C# 公共静态只读对象,c#,oop,C#,Oop,在web应用程序中使用公共静态只读对象有什么缺点吗?我以前没用过 我有一个web应用程序,它需要根据用户的权限及其现有操作的状态更改页面上的显示 这是一个静态类,它返回其能力的自定义对象 public static class Abilities { public static readonly Ability ViewPage = new Ability() { LinkText = "something", Hidden = false,

在web应用程序中使用公共静态只读对象有什么缺点吗?我以前没用过

我有一个web应用程序,它需要根据用户的权限及其现有操作的状态更改页面上的显示

这是一个静态类,它返回其能力的自定义对象

public static class Abilities
{
   public static readonly Ability ViewPage = new Ability()
   {
       LinkText = "something",
       Hidden = false,
       //Any other additional unchanging properties
   }
}
然后,当每个用户登录时,有一个方法可以设置他们应该具备的能力

public class User
{
    public List<Ability> GetMyAbilities()
    {
       var myAbilities = new List<Ability>();
       if //some programming logic here
       myAbilities.Add(Abilities.ViewPage);
       return myAbilities;
    }
}
这似乎像预期的那样工作,但我想知道当对多个用户使用此方法时是否有任何缺点或问题


根据评论-添加一点细节。用户类是在每个用户登录到web应用程序时为其创建的。能力列表指的是他们登录后可以做的事情。因此,每个用户在登录到默认页面时都将获得一个他们拥有的能力列表

您打算如何使用它们?只有到那时,我们才能告诉你缺点是什么。你可能正在重新发明轮子——那里已经有很多授权经理,例如AzMan.NET。我建议使用其中一个。静态是每个应用程序域的,IIS至少可以随意回收应用程序域,这样你可能会不断丢失和重新初始化静态成员。就个人而言,我也更喜欢使用不可变对象作为静态只读。我在一个建议之间左右为难。一方面,我避免静态,喜欢DI/IoC;另一方面,这可以说是显示了用作域对象的值。然而,有一件事让我感到不舒服,那就是该值与UI方面(如链接文本)直接关联,这感觉不太合适。