Singleton类用于多维数据

时间:2013-08-12 05:17:56

标签: c# asp.net asp.net-3.5

我在C#2008中使用ASP.NET 3.5。

我有一张包含以下数据的表格:

Id Code Message Details
-- ---- ------  ------------
1  111  xxxxx   xxxxxxxxxxx
2  222  yyyyy   yyyyyyyyyyy
3  333  zzzzz   zzzzzzzz

依旧......

这是静态数据,我想在整个应用程序中使用它。

我创建了一个具有以下属性的类:

public class CodeDetails
{
   public int Id { get; set; }
   public int Code { get; set; }
   public string message { get; set; }
   public string details { get; set; }
}

并创建了另一个课程codeDetailsList,我想将其作为单身人士,如下所示:

public class codeDetailsList
{
    private List<CodeDetailst> lstCodeDetailst;

    private CodeDetailst()
    {
       lstCodeDetails = new List<CodeDetails>();
    }
}

现在,我想要做的是,我想将上面给出的表格数据的项目添加到这个单例类的列表中,并希望在整个应用程序中访问它。

我的问题是如何添加项目并访问它们?

3 个答案:

答案 0 :(得分:3)

与Varun的答案类似,我只是想完全实现。

public class CodeDetailsList
{
    private static readonly CodeDetailsList _instance = new CodeDetailsList();
    public static CodeDetailsList Instance 
    {
        get { return _instance; }
    }

    public ReadOnlyCollection<CodeDetails> lstCodeDetailst { get; private set; }

    private codeDetailsList()
    {
        var masterList = new List<CodeDetails>();

        masterList.Add(new CodeDetails(1, 111, "xxxxx", "xxxxxxxxxxx"));
        masterList.Add(new CodeDetails(2, 222, "yyyyy", "yyyyyyyyyyy"));
        //... And so on ...

        //mark the list as read only so no one can add/remove/replace items in the list
        lstCodeDetailst= masterList.AsReadOnly();
    }
}

public class CodeDetails
{
   public CodeDetails(id, code, message, details)
   {
       Id = id;
       Code = code;
       Message = message;
       Details = details;
   }

   //Mark the setters private so no one can change the values once set.
   public int Id { get; private set; }
   public int Code { get; private set; }
   public string Message { get; private set; }
   public string Details { get; private set; }
}

当您第一次尝试访问CodeDetailsList时,Instance的构造函数将被调用一次(如果类中有其他静态成员,则构造函数将在第一次调用任何静态成员时运行)

因为lstCodeDetaillstReadOnlyCollection来电者,将无法添加,删除或替换列表中的对象。另外因为现在CodeDetails有私人制定者,所以其中的所有项目也都是“只读”。

答案 1 :(得分:1)

public class CodeDetailsList
{
    public static readonly CodeDetailsList Instance = new CodeDetailsList();

    public List<CodeDetails> ListCodeDetails { get; private set; }

    private CodeDetailsList()
    {
        ListCodeDetails = new List<CodeDetails>
       {
           new CodeDetails { Id = 1, Code = 1, Details = "xxxxx", Message = "xxxxx"},
           new CodeDetails { Id = 2, Code = 2, Details = "yyyyy", Message = "yyyy"} // ...
       };
    }
}

您应该在codeDetailsList的构造函数中初始化数据。构造函数应保持私有状态,以确保您不创建新实例。使用Instance上的CodeDetailsList字段访问数据。

答案 2 :(得分:0)

你有没有故意省略Singleton类中的getInstance()方法?反正...

添加内容可能类似于:

CodeDetails codeDetails = new CodeDetails();
codeDetails.setId("id1");
codeDetails.setCode("code1");
codeDetails.setMessage("message1");
codeDetails.setDetails("details1");

(CodeDetailsList.getInstanceMethod()).add(codeDetails);

访问:

CodeDetails codeDetails = (CodeDetails)(CodeDetailsList.getInstaceMethod()).get(0);

如果您有多个记录

,可以将其置于循环中

希望这有帮助