Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / DateTime / 25 сообщений из 68, страница 1 из 3
02.07.2014, 17:09
    #38686026
john2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime
Подскажите, зачем структуру DateTime сделали неизменяемой?
...
Рейтинг: 0 / 0
02.07.2014, 17:27
    #38686044
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime
ушёл за попкорном
...
Рейтинг: 0 / 0
02.07.2014, 17:47
    #38686063
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime
john2007Подскажите, зачем структуру DateTime сделали неизменяемой?

Код: c#
1.
2.
3.
4.
5.
var dateTime = new DateTime(2014, 2, 1);
dateTime.Day = 30;

var dateTime = new DateTime(2014, 1, 30);
dateTime.Month = 2;
...
Рейтинг: 0 / 0
02.07.2014, 17:49
    #38686064
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime
Изопропилушёл за попкорном

а чито, хороший вопрос. ждём набросов свенома на бедную DateTime.

хотя орхитектура DateTime и правда напростительно ужасна.
...
Рейтинг: 0 / 0
02.07.2014, 17:53
    #38686069
john2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime
hVosttjohn2007Подскажите, зачем структуру DateTime сделали неизменяемой?

Код: c#
1.
2.
3.
4.
5.
var dateTime = new DateTime(2014, 2, 1);
dateTime.Day = 30;

var dateTime = new DateTime(2014, 1, 30);
dateTime.Month = 2;



А это что за код, о чем он?
...
Рейтинг: 0 / 0
02.07.2014, 18:00
    #38686076
john2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime
hVosttjohn2007Подскажите, зачем структуру DateTime сделали неизменяемой?

Код: c#
1.
2.
3.
4.
5.
var dateTime = new DateTime(2014, 2, 1);
dateTime.Day = 30;

var dateTime = new DateTime(2014, 1, 30);
dateTime.Month = 2;



А, я понял, кажется.

а в чем будет разница с
var dateTime = new DateTime(2014, 2, 30);
?

Ладно упрощу вопрос, зачем сделали структуру Int32 неизменяемой?
...
Рейтинг: 0 / 0
02.07.2014, 18:06
    #38686083
john2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime
john2007Ладно упрощу вопрос, зачем сделали структуру Int32 неизменяемой?

Слишком просто получилось и бессмысленно ))

Тогда по другому, зачем структуры делать неизменяемыми?

И кто такой свеном? ))
...
Рейтинг: 0 / 0
02.07.2014, 18:18
    #38686095
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime
john2007И кто такой свеном? ))Это страшный человек. Лучше вообще не знать, что такие люди на земле есть.
...
Рейтинг: 0 / 0
02.07.2014, 18:27
    #38686103
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime
john2007А, я понял, кажется.

а в чем будет разница с
var dateTime = new DateTime(2014, 2, 30);
?

ошибка будет. и dateTime нельзя будет воспользоваться. а что делать с существующим dateTime, над которым вздумали поиздеваться?
...
Рейтинг: 0 / 0
02.07.2014, 18:31
    #38686105
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime
john2007Тогда по другому, зачем структуры делать неизменяемыми?

чтоб их нельзя было изменять. например, из параллельного потока. и вообще, даже изменяемые структуры не такие уж изменяемые:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
struct A {
   public int V1;
   public int V2;
}

var list = new List<A> { 
   new A { V1 = 1, V2 = 2 },
   new A { V1 = 2, V2 = 2 },
   new A { V1 = 3, V2 = 2 },
};

list[0].V1 = 5;

Console.WriteLine(list[0].V1);



что увидем на экране?
...
Рейтинг: 0 / 0
02.07.2014, 19:01
    #38686139
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime
john2007,
или так
Код: c#
1.
2.
3.
4.
            A[] list = { new A { V1 = 1, V2 = 2 }};
            list[0].V1=1000000000;
            Console.WriteLine(list[0].V1);
            Console.Read();
...
Рейтинг: 0 / 0
02.07.2014, 20:22
    #38686195
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime
Где-то в степиjohn2007,
или так
Код: c#
1.
2.
3.
4.
            A[] list = { new A { V1 = 1, V2 = 2 }};
            list[0].V1=1000000000;
            Console.WriteLine(list[0].V1);
            Console.Read();



Вывело 1000000000. А в случае с дженериком не компилится. Т.е. вызов list[0] у дженерика приводит к выполнению new A()?
...
Рейтинг: 0 / 0
02.07.2014, 20:46
    #38686205
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime
Pallaris,
авторТ.е. вызов list[0] у дженерика приводит к выполнению new A()?
получаем копию.
new A() - это не копия, это default(A)

Код: c#
1.
2.
3.
4.
5.
            var res1 = default(A);// new A();
            Console.WriteLine(res1.V1);
            var res2 = list[0];
            Console.WriteLine(res2.V1);
            Console.Read();
...
Рейтинг: 0 / 0
02.07.2014, 21:10
    #38686215
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime
Где-то в степи,

А list[0] у массива почему копию не возвращает?
...
Рейтинг: 0 / 0
02.07.2014, 21:14
    #38686218
cdtyjv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime
john2007Подскажите, зачем структуру DateTime сделали неизменяемой?Ну это маразм. Обычный маразм. Так же они, например, сделали структурой Guid. Поэтому вы не можете, например, обнулить его. Вместо этого вам предлагается использовать default(Guid), который есть 000...000. Бред несусветный. Ну да ладно, таких перлов в .Net полно, не обращайте внимания.
...
Рейтинг: 0 / 0
02.07.2014, 21:32
    #38686227
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime
Pallaris,
Потому что это фишка оптимизатора компилятора, для массивов возвращается указатель на упаковку - тут же нет дженериков, но только вы приведете что вернулось к структуре, песня будет старой.
или с левой стороны поставите IList<A>
...
Рейтинг: 0 / 0
02.07.2014, 21:34
    #38686231
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime
Блин о чем тема - что структура это не ссылочный тип, или что структура не может отнаследоваться от структуры? Или что?
...
Рейтинг: 0 / 0
02.07.2014, 21:34
    #38686232
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime
hVosttждём набросов свеномаА что Свеном теперь тут будет ошиваться?
Я думал, он облегчился и пошёл заниматься своими крутяцкими проектами.
...
Рейтинг: 0 / 0
02.07.2014, 21:39
    #38686235
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime
Где-то в степи,

В мсдн пишут что для дженерика list[0] вернет выражение (видимо, new a { v1=1, v2=2 }). Оно что, все время так будет работать при любом обращении к list[0]? Или я что-то не так понял?
...
Рейтинг: 0 / 0
02.07.2014, 21:50
    #38686241
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime
Pallaris,
Я что те вразумлю вас что значит для всех и всегда? ну и для второго будет list[1].V1=100 некомпильно..
ну наверное будет всегда, пока в следующих версиях не исправят ( исправили же захват локальных в анонимах)по просьбе трудящихся, хотя Э.Л. писал что исправили по причине - так как заебся давать объяснения..
...
Рейтинг: 0 / 0
02.07.2014, 22:05
    #38686250
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime
Где-то в степи,

Так может и фиксить не надо, я не знаю. Я не шарю, как оно работает, поэтому и задаю вопросы. Получается при любом обращении к дженерику для структуры будет создаваться новый объект (где, в куче?) -я правильно понимаю? А list<A> list = new list<A> { new a ()} просто говорит, что enumeraor, когда к нему обратятся, должен вернуть new a(), но на этапе объявления дженерика ничего не создается? Так?
...
Рейтинг: 0 / 0
02.07.2014, 22:37
    #38686264
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime
Pallaris,
у вас какая то куча.
< когда к нему обратятся, должен вернуть new a()> копию
зачем ее запаковывать и распаковывать
<но на этапе объявления дженерика ничего не создается? > создается объект внутренним массивом
вообще по list<A> list = new list<A> { new a ()} можно еще один топик создать
Мы так можем до бесконечности раскручивать стек вопросов и ответов, структуры это очень хитрые и своенравные типы
я понимаю что не хватает знаний ( это не порок, если вы их ищите), надо наверно обратиться к сети, почитать блог Эрика Липперта
есть частичный перевод, он как бы объясняет подробно все плюшки с точки зрения компилятора и логики ( почему так а не так).
в теме поста это абсурдно обсуждать.
зы автор Guid. Поэтому вы не можете, например, обнулить его. Вместо этого вам предлагается использовать default(Guid),
Guid.Empty
зачем его обнулять? мы сами будем его генерить? дааа, трудно быть богом....
...
Рейтинг: 0 / 0
02.07.2014, 22:46
    #38686267
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime
Pallaris,
я вам вдогонку, что бы не расстраивать )
Код: c#
1.
2.
  var song = new {s = new A {V1 = 1, V2 = 2}};
  song.s.V1 = 100;
...
Рейтинг: 0 / 0
03.07.2014, 00:44
    #38686314
john2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime
hVosttjohn2007Тогда по другому, зачем структуры делать неизменяемыми?
чтоб их нельзя было изменять. например, из параллельного потока. и вообще, даже изменяемые структуры не такие уж изменяемые:


Как то? Не понял. Как изменяемую структуру изменить из другого потока и как неизменяемая структура от этого защищает?

hVostt
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
struct A {
   public int V1;
   public int V2;
}

var list = new List<A> { 
   new A { V1 = 1, V2 = 2 },
   new A { V1 = 2, V2 = 2 },
   new A { V1 = 3, V2 = 2 },
};

list[0].V1 = 5;

Console.WriteLine(list[0].V1);



что увидем на экране?

Это о чем говорит? A - это какая структура, изменяемая или нет или о чем пример? ))
Не компилится и понятно почему. Это все равно что написать
var random = new Random();
random.Next = 3;
...
Рейтинг: 0 / 0
03.07.2014, 00:46
    #38686315
john2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DateTime
Имел ввиду:
var random = new Random();
random.Next() = 3;
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / DateTime / 25 сообщений из 68, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]