Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.02.2011, 22:05   #1
flcl
Новичок
Джуниор
 
Регистрация: 23.02.2011
Сообщений: 2
По умолчанию .net c# про инкапсуляцию

Подскажите пожалуйста как сделать правильно, у меня в программе есть некоторый класс к примеру для чтения и получения значений из xml файла, доступ к этим значениям нужен из других мест программы(подразумевается что в xml хранятся некоторые опции влияющие на работу программы).

Собственно суть вопроса в том как организовать доступ к этим данным "правильно" я так понимаю что объявление статической переменной содержащей объект этого класса в духе:
Код:
public class A
{
public static MyXmlConfig xmlconf = new MyXmlConfig();
CustomClass cc = new CustomClass();
}
public class MyXmlConfig 
{
public string GetOption(){...}
}
а потом обращаться к нему в духе:

Код:
public class CustomClass 
{
public CustomClass()
{
string option = A.xmlconf.GetOption();
}
}
является страшным) нарушением инкапсуляции.
Как правильно и красиво наладить доступ? Может быть есть какие-нибудь шаблоны проектирования для красивой реализации такой логики?

ps.я только начинаю изучать программирование вообще и на .net в частности потому, если спросил глупость извиняйте)
flcl вне форума Ответить с цитированием
Старый 23.02.2011, 22:58   #2
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

Цитата:
Собственно суть вопроса в том как организовать доступ к этим данным "правильно" я так понимаю что объявление статической переменной содержащей объект этого класса в духе:
Мысль-то верная, только надо эту переменную запихнуть в этот же класс )
По крайней мере я так сделал и вообще отлично живется
Код:
    public sealed class AppSettings
    {
        public const string FileName = @"Settings.xml";    

        private static readonly AppSettings _current;
        private static readonly AppSettings _default;       

        static AppSettings()//статический конструктор
        {
            _default = new AppSettings();
            _current = Load();//тут загружаю из файла
        }

        private AppSettings()//приватный обычный конструктор
        {
        }

        public static AppSettings Current
        {
            get { return _current; }
        }
.....
        public bool SomeValue = false;
....
}
обращаюсь потом в любом месте в любой момент
Код:
 checkBox3.Checked = AppSettings.Current.SomeValue;
m0nax вне форума Ответить с цитированием
Старый 24.02.2011, 11:42   #3
flcl
Новичок
Джуниор
 
Регистрация: 23.02.2011
Сообщений: 2
По умолчанию

m0nax, у меня конструктор класса должен получать параметры, поэтому статический конструктор я так понимаю использовать не получится

пока я решил посылать объект реализующий нужный интерфейс в конструктор класса и обращаться через него, но такая реализация конечно не удобна
flcl вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаленный SQL-сервер Ado.Net + .Net remoting + Asp .Net gammaray Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 2 22.11.2010 17:36