Головоломка для начинающих статических и нестатических классов в ООП (C #) - PullRequest
0 голосов
/ 20 января 2012

Мой друг (с работы) задал мне вопрос.

  1. Удалите ключевое слово static из Dictionary Live из класса Members.
  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;
        }
    }
}

Он говорит: «Есть способ сделать это», но я могу »не могу найти это, и я не верю, что на самом деле есть.Каково ваше мнение?

ОБНОВЛЕНИЕ / ОТВЕТ: Я решил вопрос с помощью Даниэля Хилгарта ... Вот оно;


using System;
using System.Collections.Generic;</p>

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

<pre><code>    private static readonly Members __instance = new Members();

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

}

Использование: Members.Instance.Live.TryGetValue (signatureFromRequest, out userId);

1 Ответ

1 голос
/ 20 января 2012

Точный синтаксис, который вы указали, не существует.
Одной из возможностей может быть синглтон, но он будет выглядеть так:

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

Обратите внимание на часть .Instance.

См. здесь , чтобы узнать о нескольких способах реализации синглтона.

Как видите, теперь свойство Live больше не является статическим, а новое свойство Instance...

Полагаю, лучше спросить вашего коллегу, что он имел в виду.

...