maxistua
1

Возврат значения структуры

16.08.2011, 01:04. Показов 2340. Ответов 4
Метки нет (Все метки)

Приветствую

Есть структура
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public  struct Field
{
        string _name;
        string _type;
        string _length;
        string _value;
        string _defaultValue;
        bool _unsigned;
        bool _isNull;
 
// .... /// 
 
        public string Value
        {
               get{...}
               set{...}
        }
 
 
}
Есть ее объявление
C#
1
Field field1;
Доступ к значению
C#
1
field1.Value {get set}
И вот вопрос - Как можно переопределить метод доступа ко всей структуре?
Чтобы значение получать не через свойство Value, а непосредственно при обращении к структуре: field1 {get set}
C#
1
2
3
Пример: 
field1 = 5; // То же самое что и field1.Value = 5
string val = field1; // То же самое что и val = field.Value;
Цель.
Создание ORM системы для управления объектами.
На данном этапе - это определение объекта, описание полей и свойств.
И как бы хотелось иметь универсальное поле, у которого есть "свойство доступа по умолчанию" и в тоже время отдельные методы для дальнейшего управления
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.08.2011, 01:04
Ответы с готовыми решениями:

Возврат значения из метода
Всем привет, имею код int currentPosition = 0; // переменная текущей позиции курсора....

Возврат значения из Task
Здравствуйте. Есть код, который сканирует данные с USB, и он работает (принимает байты с ардуино)....

Возврат значения разными способами
Помогите, пожалуйста! Даны действительные p, q. Код: using System; using...

Возврат значения типа bool
Ругаеться на то что не все ветви кода возвращяют значение static public bool Podsch(Ob pol) ...

4
20 / 20 / 3
Регистрация: 01.04.2010
Сообщений: 57
16.08.2011, 01:37 2
C#
1
2
3
4
public static implicit operator Field (int i)
        {
            return new Field {Value = i.ToString()};
        }
это чтобы можно было
field1 = 5; // То же самое что и field1.Value = 5
над обратным буду еще думать...

Добавлено через 4 минуты
C#
1
2
3
4
 public static implicit operator string(Field f)
        {
            return f.Value;
        }
ну а так чтобы можно было
// То же самое что и val = field.Value;
это надо в структуре Field вставить

Добавлено через 17 минут
интересная ссылка по вашему вопросу
1
maxistua
16.08.2011, 09:37 3
Спасибо! Работает отлично!

Другой вопрос, переменная value - может быть любого типа (string, double, int, ...)
Есть универсальный тип var, но его можно использовать только внутри методов объекта.
При объявлении в структуре - компилятор выдает ошибку тип не найден.

Есть ли еще тип в C# который мог принимать значения с любых переменных без преобразования toString/ToInt и т.п.?

Возможно ли добавление свойств структуры "на лету", в конструкторе, в зависимости от передаваемых параметров?

Или лучше в структуре описать все возможные типы, и далее к ним реализовывать доступ?
Мохаммед Али
131 / 69 / 5
Регистрация: 14.08.2009
Сообщений: 916
16.08.2011, 09:43 4
Цитата Сообщение от maxistua Посмотреть сообщение
Спасибо! Работает отлично!

Другой вопрос, переменная value - может быть любого типа (string, double, int, ...)
Есть универсальный тип var, но его можно использовать только внутри методов объекта.
При объявлении в структуре - компилятор выдает ошибку тип не найден.

Есть ли еще тип в C# который мог принимать значения с любых переменных без преобразования toString/ToInt и т.п.?

Возможно ли добавление свойств структуры "на лету", в конструкторе, в зависимости от передаваемых параметров?

Или лучше в структуре описать все возможные типы, и далее к ним реализовывать доступ?
можно прописывать для каждого значения или оьекта тип object, так как это вроде как базовый тип для всех остальных,добавление свойств вроде невозможно на лету,можно ведь прост осоздать свойство типа список свойтств с типом object туда пихат ьвсе свойства разных типов, лучше в структуре описать все заранее.
0
20 / 20 / 3
Регистрация: 01.04.2010
Сообщений: 57
16.08.2011, 13:53 5
C#
1
2
3
4
5
6
7
8
9
10
11
public dynamic Value;
 
        public static implicit operator Field (int o)
        {
            return new Field {Value = o};
        }
 
        public static implicit operator int(Field f)
        {
            return f.Value;
        }
но тогда теряется однозначность, к сожалению. (и это только для .NET 4.0 и выше =))

т.е. можно добавить еще к структуре:
C#
1
2
3
4
5
6
7
8
9
public static implicit operator Field (string o)
        {
            return new Field {Value = o};
        }
 
        public static implicit operator string(Field f)
        {
            return f.Value;
        }
но тогда нужно будет прописывать например в вызове
C#
1
Console.WriteLine((string)field1);
приведение к типу чтобы компилятор знал, в этом месте какое приведение типа нужно. По сути явное преобразование вводится..
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.08.2011, 13:53

Добавить возврат значения из программы
static void Main(string args) { double a, b, c; ...

Возврат более одного значения из метода
Доброго времени суток, читаю книгу SCHILDT'а и в конце каждой главы делаю упражнение что бы...

Возврат значения функции по ссылке возможен?
Добрый день! Хочу уточнить некоторый принцип работы с функциями, возвращающими значения. Есть ли...

C# возврат значения из потока
и снова вопрос про потоки: есть форма.на ней label1.нужно label.Text передать значение IPStatus.В...

Возврат значения с метода с условием
Всем привет! Есть метод: protected string GetStatus(object dataItem) { int count =...

Возврат значения из хранимой процедуры
В БД создал хранимую процедуру, которая возвращает ID вставленной записи. Процедура работает ALTER...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.