OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 27 Апрель, 2024 23:34

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Ошибка в C# с readonly структурой
СообщениеДобавлено: Среда, 07 Июль, 2010 14:10 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Разработчики языка C# перемудрили с дизайном в результате разработчики его компилятора "не смогли":
Код:
class Program
{
  struct Foo
  {
    public int value;
    public void Init (int x)
    {
      this.value = x;
    }
  }

  static readonly Foo foo;

  static void Main (string[] args)
  {
    foo.value = 5; // Здесь правильно ругается:
    // Error 1 Fields of static readonly field 'Program.foo' cannot be assigned to
    // (except in a static constructor or a variable initializer)

    foo.Init(5); // А здесь не ругается ни при компиляции, ни во время исполнения,
    // но foo.value остаётся равным 0

    System.Console.WriteLine("foo.value = {0}", foo.value);
    System.Console.ReadLine();
  }
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка в C# с readonly структурой
СообщениеДобавлено: Среда, 07 Июль, 2010 15:28 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Интересно, если чуть-чуть изменить:
Код:
            public void Init(int x)
            {
                System.Console.WriteLine("x = {0}", x);
                System.Console.WriteLine("this.value = {0}", this.value);
                this.value = x;
                System.Console.WriteLine("this.value = {0}", this.value);
            }
,то видно, что значение this.value меняется на 5, но значение foo.value остаётся равным 0...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка в C# с readonly структурой
СообщениеДобавлено: Среда, 07 Июль, 2010 16:13 

Зарегистрирован: Воскресенье, 08 Март, 2009 17:54
Сообщения: 372
Мамочка родная, что за химия такая?!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка в C# с readonly структурой
СообщениеДобавлено: Четверг, 08 Июль, 2010 13:51 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Такое ощущение, будто на время выполнения вызова процедуры структура копируется куда-то (на стэк?), а потом копируется или не копируется обратно в зависимости от отсутствия или наличия метки readonly.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка в C# с readonly структурой
СообщениеДобавлено: Четверг, 08 Июль, 2010 15:00 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Вообще-то, конечно, ругаться должен. Либо при компиляции (что есть правильно и хорошо), либо, на крайний случай, при попытках изменения значения при выполнении (что гораздо хуже, но лучше, чем ничего).
Отсутствие ругани - это серьезный косяк системы ИМХО...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB