OberonCore https://forum.oberoncore.ru/ |
|
Ошибка в C# с readonly структурой https://forum.oberoncore.ru/viewtopic.php?f=27&t=2727 |
Страница 1 из 1 |
Автор: | Сергей Губанов [ Среда, 07 Июль, 2010 14:10 ] |
Заголовок сообщения: | Ошибка в C# с readonly структурой |
Разработчики языка 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(); } } |
Автор: | Geniepro [ Среда, 07 Июль, 2010 15:28 ] |
Заголовок сообщения: | Re: Ошибка в C# с readonly структурой |
Интересно, если чуть-чуть изменить: Код: public void Init(int x) ,то видно, что значение this.value меняется на 5, но значение foo.value остаётся равным 0...
{ 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); } |
Автор: | Algo [ Среда, 07 Июль, 2010 16:13 ] |
Заголовок сообщения: | Re: Ошибка в C# с readonly структурой |
Мамочка родная, что за химия такая?! |
Автор: | Сергей Губанов [ Четверг, 08 Июль, 2010 13:51 ] |
Заголовок сообщения: | Re: Ошибка в C# с readonly структурой |
Такое ощущение, будто на время выполнения вызова процедуры структура копируется куда-то (на стэк?), а потом копируется или не копируется обратно в зависимости от отсутствия или наличия метки readonly. |
Автор: | Валерий Лаптев [ Четверг, 08 Июль, 2010 15:00 ] |
Заголовок сообщения: | Re: Ошибка в C# с readonly структурой |
Вообще-то, конечно, ругаться должен. Либо при компиляции (что есть правильно и хорошо), либо, на крайний случай, при попытках изменения значения при выполнении (что гораздо хуже, но лучше, чем ничего). Отсутствие ругани - это серьезный косяк системы ИМХО... |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |