Access Modifier / Design - Что делать / использовать для этого сценария доступности классов - PullRequest
1 голос
/ 08 августа 2010

Недавно я реализовал одноэлементный класс, и в нем я объявил статический общий список класса (T).В любом случае, это моя первая попытка использования синглтона, но все, что я пробовал до сих пор, работает.

Мой вопрос: чтобы быть последовательным, я не хочу, чтобы MasterSiteData был виден другим классам, кроме моего класса Singleton.Я подумал о том, чтобы заключить оба класса в родительский класс, что дало бы мне новые возможности.Тем не менее, я бы предпочел, чтобы у вас было несколько замечательных мнений:).

 public sealed class Singleton
    {
        private static readonly Singleton Instance = new Singleton();

        private Singleton()
        {
        }

        public static List<MasterSiteData> MasterDetails = new List<MasterSiteData>();
    }

    public class MasterSiteData
    {
        public Guid GuidId { get; set; }
        public string Uri { get; set; }
        public int LinkNumber { get; set; }

        public MasterSiteData(Guid guid, string uri, int linknumber)
        {
            GuidId = guid;
            Uri = uri;
            LinkNumber = linknumber;
        }
    }

РЕДАКТИРОВАТЬ:

Дерьмо!Я полностью забыл, что мне нужно создать экземпляр класса MasterSiteData, чтобы добавить запись в мой список, поэтому я действительно не могу скрыть ее, например

 Singleton.MasterDetails.Add(new MasterSiteData(Guid.NewGuid(), "lol1", 1337));

Ответы [ 2 ]

1 голос
/ 08 августа 2010

Чтобы достичь требуемого уровня доступности, вам нужно объявить свой класс MasterSiteData внутри класса Singleton и пометить его уровень доступности как private.

Например:

 public class Singleton
    {
        private MasterSiteData innerClass = new MasterSiteData();

        private class MasterSiteData
        {
            // your mastersitedata class
        }
    }

Поскольку класс Singleton фактически «владеет» классом MasterSiteData, он может создавать экземпляры самого класса MasterSiteData, однако никакой код вне внешнего класса Singleton не может получить доступ или создать экземпляры MasterSiteData тип.

1 голос
/ 08 августа 2010

Используйте интерфейс и сделайте реализацию частной для Singleton. (Кроме того, не используйте открытые поля, используйте свойства):

public sealed class Singleton
{
    public static List<ISiteData> Details { get; private set; }

    private Singleton()
    {
        //create new instances of MasterSiteData and add to the list
    }

    private class MasterSiteData : ISiteData
    {
        public Guid GuidID {get;set;}
        public string Uri {get;set;}
        public int LinkNumber {get;set;}

        public MasterSiteData(Guid guid, string uri, int linkNumber)
        {
            GuidID = guid;
            Uri = uri;
            LinkNumber = linkNumber;
        }
    }
}

public interface ISiteData
{
    Guid GuidID {get;set;}
    string Uri {get;set;}
    int LinkNumber {get;set;}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...