Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Начальное значение поля структуры, как установить? 
V
    Опции темы
semicolon
Дата 30.8.2012, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 30.8.2012

Репутация: нет
Всего: нет



Здравствуйте! Вот такой код:
Код

Console.WriteLine( new DateTime().Day );

выводит на экран «1».  Но, как известно, начальные значения неконстантных полей структуры определять нельзя. И нестатического конструктора по умолчанию у структур нет. Что нужно дописать, чтобы начальное значение свойства Value моей структуры MyStruct тоже было единицей?
Код

Console.WriteLine( new MyStruct().Value );
......
public struct MyStruct
{
    public int Value { get; set; }
}


Это сообщение отредактировал(а) semicolon - 30.8.2012, 14:39
PM MAIL   Вверх
Cheloveck
Дата 30.8.2012, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: нет
Всего: 32





--------------------
user posted image
PM Jabber   Вверх
semicolon
Дата 30.8.2012, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 30.8.2012

Репутация: нет
Всего: нет



Цитата(Cheloveck @  30.8.2012,  16:25 Найти цитируемый пост)
http://msdn.microsoft.com/en-us/library/sy...eattribute.aspx 

К сожалению, это не то.
Цитата
The DefaultValueAttribute does not set the property to the value, it is purely informational. The Visual Studio designer will display this value as non-bold and other values as bold (changed)

PM MAIL   Вверх
Cheloveck
Дата 30.8.2012, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: нет
Всего: 32



Цитата(semicolon @  30.8.2012,  17:44 Найти цитируемый пост)
К сожалению, это не то.


Действительно, не то. Тогда так
Код

struct Test {
    int? xxx;

    public int Xxx { 
        get { return xxx.HasValue ? xxx.Value : 1; }
        set { xxx = value; }
    }
}



--------------------
user posted image
PM Jabber   Вверх
semicolon
Дата 30.8.2012, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 30.8.2012

Репутация: нет
Всего: нет



Cheloveck, да это работает, спасибо smile Но если это поле будет использоваться в вычислениях, его каждый раз придётся обвешивать такой проверкой, что не очень хорошо. Всё-таки, интересно, как это реализуется в DateTime. Я смотрю исходник DateTime, сгенерированный рефлектором. Там обнуляемые поля не используются. Но принцип понять пока не могу. Код для меня довольно сложен. Свойство Day вычисляется из приватного поля dateData, которое инициализиуется конструктором с параметром. Но откуда вызывается этот конструктор - вот загадка. В моей структуре конструктор с параметром автоматически никогда не вызывается :( Может это какой-то внутренний хак фрейморка? smile

Это сообщение отредактировал(а) semicolon - 30.8.2012, 20:14
PM MAIL   Вверх
semicolon
Дата 30.8.2012, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 30.8.2012

Репутация: нет
Всего: нет



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

public struct MyStruct
{
    private int _value;
    public int Value
    {
        get
        {
            return _value + 1;
        }

        set    
        {
            _value = value - 1;
        }
    }
}


Cheloveck, спасибо за возможный вариант кода smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0863 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.