0

我的一个朋友(工作)问我一个问题。

  1. 从类中删除static关键字。Dictionary LiveMembers
  2. 不要用于在方法new Members();中创建实例。Check(...)

因此,使用这些规则,您必须为Live来自其他类的调用做些什么,例如:

Members.Live.TryGetValue(signatureFromRequest, out userId);

我有这个;

using System;
using System.Collections.Generic;
namespace Webbing.Session
{
    public class Members
    {
        // THAT Dictionary Live was a static... public static Dictionary...
        public Dictionary Guid, int> Live = new Dictionary Guid,int>();
    }
}

还有这个:

using System;
using WcfService.Session;

namespace Webbing.BusinessDb
{
    public class Signature
    {
        public static bool Check(Guid signatureFromRequest)
        {
            bool result = false;

            int userId;

            Members checker = new Members(); // <--------- don't use this
            checker.Live.TryGetValue(signatureFromRequest, out userId);

            if (userId != 0)
            {
                result = true;
            }

            return result;
        }
    }
}

他在说,“有办法做到这一点。”但我找不到它,我不相信真的有。你有什么意见?

更新/回答: 我在 Daniel Hilgarth 的帮助下解决了这个问题……在这里;


using System;
using System.Collections.Generic;

namespace Webbing.Session { public class Members { // Guid, userId public Dictionary Guid, int> Live = new Dictionary Guid,int>();

    private static readonly Members __instance = new Members();

    public static Members Instance
    {
        get
        {
            return __instance;
        }
    }
}

}

用法:Members.Instance.Live.TryGetValue(signatureFromRequest, out userId);

4

1 回答 1

1

您提供的确切语法无法使用。
一种可能性是单例,但它看起来像这样:

Members.Instance.Live.TryGetValue(signatureFromRequest, out userId);

注意.Instance部分。

有关实现单例的几种方法,请参见此处。

如您所见,现在该Live属性不再是静态的,但新属性Instance...

我想最好简单地问你的同事他的意思。

于 2012-01-20T15:11:16.377 回答