Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Методы get и set для класса


Автор: Atomic 5.3.2009, 00:13
Есть класс. Нужно отлавливать вызовы несуществующих переменных и делать вид, что они есть.
Собственно, этот класс будет содержать какие-то данные в хеш-таблице, но обращаться хотелось бы так, словно эти переменные в классе существуют. Обращение к несуществующей переменной должно приводить к ее созданию и некоторой обработке.
Методы get и set, насколько я понял, работают только внутри конкретной переменной.
Есть ли способ сделать такую фишку?
То есть так, чтобы вызов был в виде class.var=1 а не class.get(var,1).


Автор: nagg 5.3.2009, 00:26
На ум приходят анонимные типы только  smile
Extended properties пока вроде ещё не придумали... 

Автор: mihryak 5.3.2009, 01:04
Atomic, шарп - не динамический язык, подобный джава скрипту, все свойства должны быть явно прописаны до компиляции

что-то мне подсказывает, что нужно нечто вроде класса с индексаторами
Код

    class IndexerClass
    {
        private readonly Dictionary<string, string> map = new Dictionary<string, string>();

        public string this[string key]
        {
            get
            {
                if (!map.ContainsKey(key))
                {
                    map[key] = key + (map.Count + 1);
                }
                return map[key];
            }
            set
            {
                map[key] = value;
            }
        }
    }

    class Program
    {
        static void Main()
        {
            IndexerClass test = new IndexerClass();
            test["A"] = "A";
            Console.WriteLine(test["A"]);

            Console.WriteLine(test["B"]);

            Console.ReadKey();
        }
    }

а под этим
Цитата(Atomic @  5.3.2009,  01:13 Найти цитируемый пост)
Методы get и set, насколько я понял, работают только внутри конкретной переменной.

подразумевается ошибочное мнение, что get-set позволяет выдавать-присваивать одно поле без возможности дополнительных действий - нет, там можно делать вообще что угодно

Автор: Atomic 5.3.2009, 14:21
Спасибо, mihryak, заработало. И примерно так, как нужно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)