powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / DateTime
68 сообщений из 68, показаны все 3 страниц
DateTime
    #38686026
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, зачем структуру DateTime сделали неизменяемой?
...
Рейтинг: 0 / 0
DateTime
    #38686044
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ушёл за попкорном
...
Рейтинг: 0 / 0
DateTime
    #38686063
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
DateTime
    #38686064
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилушёл за попкорном

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

хотя орхитектура DateTime и правда напростительно ужасна.
...
Рейтинг: 0 / 0
DateTime
    #38686069
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
DateTime
    #38686076
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
DateTime
    #38686083
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
john2007Ладно упрощу вопрос, зачем сделали структуру Int32 неизменяемой?

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

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

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

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

ошибка будет. и dateTime нельзя будет воспользоваться. а что делать с существующим dateTime, над которым вздумали поиздеваться?
...
Рейтинг: 0 / 0
DateTime
    #38686105
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
DateTime
    #38686139
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
DateTime
    #38686195
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи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
DateTime
    #38686205
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
DateTime
    #38686215
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

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

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

Так может и фиксить не надо, я не знаю. Я не шарю, как оно работает, поэтому и задаю вопросы. Получается при любом обращении к дженерику для структуры будет создаваться новый объект (где, в куче?) -я правильно понимаю? А list<A> list = new list<A> { new a ()} просто говорит, что enumeraor, когда к нему обратятся, должен вернуть new a(), но на этапе объявления дженерика ничего не создается? Так?
...
Рейтинг: 0 / 0
DateTime
    #38686264
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallaris,
у вас какая то куча.
< когда к нему обратятся, должен вернуть new a()> копию
зачем ее запаковывать и распаковывать
<но на этапе объявления дженерика ничего не создается? > создается объект внутренним массивом
вообще по list<A> list = new list<A> { new a ()} можно еще один топик создать
Мы так можем до бесконечности раскручивать стек вопросов и ответов, структуры это очень хитрые и своенравные типы
я понимаю что не хватает знаний ( это не порок, если вы их ищите), надо наверно обратиться к сети, почитать блог Эрика Липперта
есть частичный перевод, он как бы объясняет подробно все плюшки с точки зрения компилятора и логики ( почему так а не так).
в теме поста это абсурдно обсуждать.
зы автор Guid. Поэтому вы не можете, например, обнулить его. Вместо этого вам предлагается использовать default(Guid),
Guid.Empty
зачем его обнулять? мы сами будем его генерить? дааа, трудно быть богом....
...
Рейтинг: 0 / 0
DateTime
    #38686267
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallaris,
я вам вдогонку, что бы не расстраивать )
Код: c#
1.
2.
  var song = new {s = new A {V1 = 1, V2 = 2}};
  song.s.V1 = 100;
...
Рейтинг: 0 / 0
DateTime
    #38686314
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
DateTime
    #38686315
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имел ввиду:
var random = new Random();
random.Next() = 3;
...
Рейтинг: 0 / 0
DateTime
    #38686318
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PallarisБлин о чем тема - что структура это не ссылочный тип, или что структура не может отнаследоваться от структуры? Или что?

Тема о том, зачем изменяемые структуры делать неизменяемыми.
Например, зачем делать неизменяемым класс - понятно.
...
Рейтинг: 0 / 0
DateTime
    #38686319
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
john2007,
это говорит, что структуры передаются по значению
как объявлен лист
Код: c#
1.
  public class List<T> : IList<T>, ICollection<T>, IList, ICollection, IReadOnlyList<T>, IReadOnlyCollection<T>, IEnumerable<T>, IEnumerable


как реализован индексатор IList<T>
Код: c#
1.
2.
3.
4.
5.
6.
  public T this[int index]
    {
   
       get{ return this._items[index];}
  
    }


вот и выплюнул нам он значение, на наш запрос..
...
Рейтинг: 0 / 0
DateTime
    #38686323
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи, я знаю, что они передаются по значению, по этому и не понял, зачем
random.Next() = 3
делать

я спросил, как это к теме топика относится?

В c# есть структуры изменяемые.
Можно (некоторые уже) сделать структуру неизменяемой (int, decimal, DateTime).

Есть классы изменяемые, можно сделать класс неизменяемым (string), неизменяемый класс понятно зачем.

Зачем структуру делать неизменяемой?
...
Рейтинг: 0 / 0
DateTime
    #38686328
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи,
кстати, индексатор IList<T> вполне возвращает структуры изменяемого типа, другое дело, что их изменить нельзя.

вопрос не про неизменяемые экземпляры, а про неизменяемые типы
...
Рейтинг: 0 / 0
DateTime
    #38686329
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
DateTime
    #38686335
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи, совсем не о том вопрос
вопрос не про структурные поля readonly и не про то, что при a = b (обе структуры) создастся копия структуры b и a станет копией структуры b

Я извиняюсь, если вопрос не понятно задаю.

вот смотрите:

struct a {
public int x;
}

a - структура изменяемого типа


struct b {

private int x;

public int X {get {return x; } }

public b(int _x) {
x = _x;
}

}

b - структура неизменяемого типа

Зачем нужны структуры неизменяемого типа?
В частности, почему int32, decimal, DateTime сделаны неизменяемыми?

Почему бы не сделать, например

var i = 0;
i.Value = 7;
...
Рейтинг: 0 / 0
DateTime
    #38686339
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или по проще пример, почему бы не сделать типа:

var d = new DateTime(2004, 12, 1);
d.AddYear(1);

нет, DateTime неизменяемый тип
...
Рейтинг: 0 / 0
DateTime
    #38686365
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
john2007Или по проще пример, почему бы не сделать типа:

var d = new DateTime(2004, 12, 1);
d.AddYear(1);

нет, DateTime неизменяемый тип

изменяемый DateTime = много лишних и ненужных проблем, связанных в том числе с многопоточностью.
для неизменяемых типов компилятор может генерировать более оптимальный код.
...
Рейтинг: 0 / 0
DateTime
    #38686368
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
john2007,

есть такая замечательная штука под названием "гугл". Поиск по "C# why structs immutable", по самой первой ссылке выдачи - ответ Липперта: http://stackoverflow.com/questions/3751911/why-are-c-sharp-structs-immutable/3753640#3753640
...
Рейтинг: 0 / 0
DateTime
    #38686373
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjvНу это маразм. Обычный маразм. Так же они, например, сделали структурой Guid. Поэтому вы не можете, например, обнулить его. Вместо этого вам предлагается использовать default(Guid), который есть 000...000. Бред несусветный. Ну да ладно, таких перлов в .Net полно, не обращайте внимания.

Код: c#
1.
2.
3.
// обнуление GUID для чайников

guid = new Guid();
...
Рейтинг: 0 / 0
DateTime
    #38686600
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кjohn2007И кто такой свеном? ))Это страшный человек. Лучше вообще не знать, что такие люди на земле есть.
Я уже нескольких подобных пережил тут.
Помнится, Ресерч Студия навел шухера в нашем садоводстве......
:-)
...
Рейтинг: 0 / 0
DateTime
    #38686606
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttjohn2007Или по проще пример, почему бы не сделать типа:

var d = new DateTime(2004, 12, 1);
d.AddYear(1);

нет, DateTime неизменяемый тип

изменяемый DateTime = много лишних и ненужных проблем, связанных в том числе с многопоточностью.
для неизменяемых типов компилятор может генерировать более оптимальный код.

А какие проблемы у изменяемых структур с многопоточностью?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
struct a {
public int x;
}

a - структура изменяемого типа


struct b {

private int x;

public int X {get {return x; } }

public b(int _x) {
x = _x;
}

}



b - структура неизменяемого типа

Для b более оптимальный код сгенерируется?
...
Рейтинг: 0 / 0
DateTime
    #38686627
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
john2007,
вот у меня есть тип наружу торчит свойство только чтение, ( ДатеTime, Guid)
когда объект этого типа будет таскаться по коду, я хочу быть уверенным, что та ничего не изменилось.
...
Рейтинг: 0 / 0
DateTime
    #38686700
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
john2007А какие проблемы у изменяемых структур с многопоточностью?

с тем, что один поток изменяет состояние структуры в то время, как другой поток считывает структуру, вы же помните, что структура передаётся по значению?

что по-вашему здесь должно произойти:

экземпляр нашей структуры:

DateTime dt;

поток 1 делает

Код: c#
1.
CallSomeFunction(dt);



в это же самое время поток 2 делает

Код: c#
1.
dt.Day += 1;
...
Рейтинг: 0 / 0
DateTime
    #38686718
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сон Веры Павловныjohn2007,

есть такая замечательная штука под названием "гугл". Поиск по "C# why structs immutable", по самой первой ссылке выдачи - ответ Липперта: http://stackoverflow.com/questions/3751911/why-are-c-sharp-structs-immutable/3753640#3753640

Ну, я почитал, конечно, только особо ничего существенного не нашел, вот и пришел за помощью - разобраться.

В частности по приведенной ссылке для структур одна причина приведена, и то, какая-то сомнительная на мой взгляд, типа
я забыл, что структуры передаются по значению, поэтому моя попытка изменения исходной структуры не получилась

с таким же успехом можно сказать, что

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
var a = 5;
var b = 0;

b = a;

a = 3;

b == 3 ?



я забыл, что при b = a; в b создается копия a, поэтому рассчитывал, что b будет синхронно меняться с a
что-то тут не то!
...
Рейтинг: 0 / 0
DateTime
    #38686729
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttс тем, что один поток изменяет состояние структуры в то время, как другой поток считывает структуру, вы же помните, что структура передаётся по значению?


Я совсем не понял примера.
Какая проблема возникает, аналогичная моему посту выше, ту, что Eric Lippert описал?
...
Рейтинг: 0 / 0
DateTime
    #38686734
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще-то я одну причину придумал, зачем структуры делать неизменяемыми.

Например, у нас есть огроменная структура, которую мы решили ради ускорения передать по ссылке в другой поток, и в целях защиты принимающий поток хочет чтобы структура была неизменяемая.

Но зачем маленькие структуры типа DateTime делать неизменяемыми? не понятно
...
Рейтинг: 0 / 0
DateTime
    #38686746
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
john2007,
вообще то в поток стараются затолкнуть структуру по значению, что бы она там сдохла без кучи.
DateTime описывает дату.
В вашем типе вполне возможно - это дата вашего рождения, бракосочетания ( уж не буду финал трогать)
И было бы не комфильно, таскаясь по жизни, если какой то м...к ее вот так просто возьмет и изменит.
Хотя это делается композицией
...
Рейтинг: 0 / 0
DateTime
    #38686757
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи,
Так а как он ее изменить, если она по значению и передается, или я не правильно понял что-то?

А про твой пример readonly выше, мне нужно осмыслить сие.
...
Рейтинг: 0 / 0
DateTime
    #38686760
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
john2007Но зачем маленькие структуры типа DateTime делать неизменяемыми? не понятно

ок, давайте подойдём с другой стороны.

вы знаете как устроена структура DateTime? хранятся ли там число, месяц, год, часы, минуты, секунды отдельно? или там хранится большое число в виде миллисекунд от начала эпохи, а свойства типа Year возвращают извлечённый результат? не знаете. потому что вас это не должно волновать. точна также разрабочиков не должно волновать то, что вы хотите менять параметры у времени. для этого вы создаёте новую структуру, если хотите что-то изменить, эта операция очень быстрая.

а теперь скажите пожалуйста, зачем вам потребовалось изменяемый DateTime? можете привести свою задачу, где это действительно нужно. а я в свою очередь постараюсь убедить вас, что это вам не нужно
...
Рейтинг: 0 / 0
DateTime
    #38686794
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
john2007Но зачем маленькие структуры типа DateTime делать неизменяемыми? не понятно

А где критерий ее "маленькости" или "великости" - это субьективно.

По смыслу - у даты есть только одно значение. Временная точка.
В этом отношении дата ничем не отличается от целого числа.

А функционал привязанный к структуре - для удобства отображения и простых операций,
которые не могут быть сделаны простой арифметикой.
...
Рейтинг: 0 / 0
DateTime
    #38686856
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D129Алексей Кпропущено...
Это страшный человек. Лучше вообще не знать, что такие люди на земле есть.
Я уже нескольких подобных пережил тут.
Помнится, Ресерч Студия навел шухера в нашем садоводстве......
:-)
а где он сейчас? Стебелек не он пишет?
...
Рейтинг: 0 / 0
DateTime
    #38686884
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt, я не обязательно хочу менять параметры напрямую, ведь в изменяемом варианте может быть специальный регламентированный метод по типу AddYear или вообще Set(y,m,d)

Создавать новую структуру при изменении все таки стоит времени, да и реализации тоже порой. Да и вообще в реальном коде это даже глупова-то будет выглядеть.

Например у меня есть какой-то объект типа List, содержащий N элементов, кто-то хочет добавить элемент Add(Item) а я давай реализацию - new List, скопировал в него N элементов, добавил в него Item и вернул его как новый объект. Клева? ))

Да, когда речь идет о классах (объектах), то о вреде изменяемых типов прежде всего говорят о потокобезопасности и вообще безопасности информации в потоках, т.е. 2 потока одновременно меняют один объект или один поток хакает другой, с задержкой меняя что-то в передаваемой объекте.

Но структуры типа int, decimal, DateTime передаются как правило по значению (можно обеспечить прием по значению), по этому мультипоточных проблем у них не возникает.

О всех остальных плюсах неизменяемости говорят как-то очень туманно, что сводится примерно к good practice
Вот я и думаю, то что выделил жирным это разве good practice ? ))
...
Рейтинг: 0 / 0
DateTime
    #38686897
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
D129, я имел ввиду, что одно дело передать по значению десяток байт, другое дело сотни байт или килобайт, для скорости лучше передавать по ссылке.
Думаю, именно в связи с этим строки сделаны классом, а не структурой, чтобы быстро передавать и не ставить каждый раз ref
...
Рейтинг: 0 / 0
DateTime
    #38686967
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
john2007 Например у меня есть какой-то объект типа List, содержащий N элементов, кто-то хочет добавить элемент Add(Item) а я давай реализацию - new List, скопировал в него N элементов, добавил в него Item и вернул его как новый объект. Клева? ))

см. ниже.

john2007Создавать новую структуру при изменении все таки стоит времени, да и реализации тоже порой. Да и вообще в реальном коде это даже глупова-то будет выглядеть.

нет, это очень-очень быстро. вряд ли прямое изменение свойств DateTime было бы быстрей. а на счёт глупо не глупо, я не вижу в чём глупо, это всего лишь синтаксис.

john2007Но структуры типа int, decimal, DateTime передаются как правило по значению (можно обеспечить прием по значению), по этому мультипоточных проблем у них не возникает.

вот именно, что по значению. структура хранит несколько полей. один поток копирует всё значение в то время, как другой поток меняет часть всего значения. т.е. проблемная ситуация. а проблебные ситуации лучше устранять.

john2007Вот я и думаю, то что выделил жирным это разве good practice ? ))

где-то иначе и быть не может. но сравнение не очень адекватное. List это класс, а про экземпляры классов (доступные по ссылке) мы сейчас вообще не говорим.
...
Рейтинг: 0 / 0
DateTime
    #38686970
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степиjohn2007,
вот у меня есть тип наружу торчит свойство только чтение, ( ДатеTime, Guid)
когда объект этого типа будет таскаться по коду, я хочу быть уверенным, что та ничего не изменилось.

торчит не свойство, а поле ты хотел сказать
как раз если его сделать свойством только на get то оно и не изменится никак, если речь про структуру, т.о. не обязательно структуру реализовывать неизменяемой в этих целях
...
Рейтинг: 0 / 0
DateTime
    #38686998
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt
john2007Но структуры типа int, decimal, DateTime передаются как правило по значению (можно обеспечить прием по значению), по этому мультипоточных проблем у них не возникает.

вот именно, что по значению. структура хранит несколько полей. один поток копирует всё значение в то время, как другой поток меняет часть всего значения. т.е. проблемная ситуация. а проблебные ситуации лучше устранять.


поток не может копировать все значение структуры, пока другой поток его меняет

при передаче структуры в другой поток создается ее копия и на это время выполнение первого потока естественно останавливается

hVosttjohn2007Вот я и думаю, то что выделил жирным это разве good practice ? ))

где-то иначе и быть не может. но сравнение не очень адекватное. List это класс, а про экземпляры классов (доступные по ссылке) мы сейчас вообще не говорим.

Пусть List - это структура.
Хотя и про объекты пишут, что неизменяемые объекты это тоже good practice
...
Рейтинг: 0 / 0
DateTime
    #38687006
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D129Я уже нескольких подобных пережил тут.
Помнится, Ресерч Студия навел шухера в нашем садоводстве......
:-)

Мой любимый форумный тролль - грексайд. Жаль, куда то подевался. Троллил он знатно и по крупному, за словом в карман не лез. И, самое приятное, не опускался до явных оскорблений и закидываний грязью.
...
Рейтинг: 0 / 0
DateTime
    #38687015
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
john2007D129, я имел ввиду, что одно дело передать по значению десяток байт, другое дело сотни байт или килобайт, для скорости лучше передавать по ссылке.
Думаю, именно в связи с этим строки сделаны классом, а не структурой, чтобы быстро передавать и не ставить каждый раз ref
Строки в дотнет могут быть до 2 мегабайт (не помню, могу ошибиться, никогда не загонял все в одну строку).
Понятно, что это должен быть ссылочный тип - но и его подтянули к простым типам, сделав неизменяемым...

А структура DateTime - хранит только то, что нужно. Не удивлюсь, если в формате double....
А всякие годы и дни - вычисляемые свойства.

Так что при передаче по значению - никаких перегрузок скорее всего нет.
...
Рейтинг: 0 / 0
DateTime
    #38687025
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
D129john2007D129, я имел ввиду, что одно дело передать по значению десяток байт, другое дело сотни байт или килобайт, для скорости лучше передавать по ссылке.
Думаю, именно в связи с этим строки сделаны классом, а не структурой, чтобы быстро передавать и не ставить каждый раз ref
Строки в дотнет могут быть до 2 мегабайт (не помню, могу ошибиться, никогда не загонял все в одну строку).
Понятно, что это должен быть ссылочный тип - но и его подтянули к простым типам, сделав неизменяемым...

А структура DateTime - хранит только то, что нужно. Не удивлюсь, если в формате double....
А всякие годы и дни - вычисляемые свойства.

Так что при передаче по значению - никаких перегрузок скорее всего нет.

И я про тоже, передавать по значению DateTime - проблем нет, поэтому и защита в виде неизменяемости DateTime не нужна.
...
Рейтинг: 0 / 0
DateTime
    #38687032
john2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Arm79]D129Мой любимый форумный тролль - грексайд. Жаль, куда то подевался. Троллил он знатно и по крупному, за словом в карман не лез. И, самое приятное, не опускался до явных оскорблений и закидываний грязью.

А тролли, они неизменяемые?
...
Рейтинг: 0 / 0
DateTime
    #38687034
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
john2007А тролли, они неизменяемые?
Неизменяемые. Они же из камня.
Но форумный гарбадж коллектор все-таки их подбирает...
:-)
...
Рейтинг: 0 / 0
DateTime
    #38687062
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
john2007поток не может копировать все значение структуры, пока другой поток его меняет

при передаче структуры в другой поток создается ее копия и на это время выполнение первого потока естественно останавливается

наивная простота

john2007Хотя и про объекты пишут, что неизменяемые объекты это тоже good practice

это для FP.
...
Рейтинг: 0 / 0
DateTime
    #38687064
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D129Неизменяемые. Они же из камня.
Но форумный гарбадж коллектор все-таки их подбирает...
:-)

...
Рейтинг: 0 / 0
DateTime
    #38687115
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
john2007,
Да дались Вам эти структуры, через год - полтора сосать будем с шарпом и что его окружает.
Надо бы проверить сайт МСУ на предмет - родину любить, ничего уже святого - одно поклонение западу...
...
Рейтинг: 0 / 0
DateTime
    #38687176
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

ASP vNext опенсурсный, да и на Linux работает.
...
Рейтинг: 0 / 0
DateTime
    #38687516
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиjohn2007,
Да дались Вам эти структуры, через год - полтора сосать будем с шарпом и что его окружает.
Надо бы проверить сайт МСУ на предмет - родину любить, ничего уже святого - одно поклонение западу...
ну что за фигня, походу скоро будет все брать курсы джавы у свенома))
...
Рейтинг: 0 / 0
DateTime
    #38687531
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivanну что за фигня, походу скоро будет все брать курсы джавы у свенома))

а Java тип не омерикосовская поделко? Oracle же.
...
Рейтинг: 0 / 0
DateTime
    #38687560
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivan,
дак и джаву в зародыше задавят ( запчасть от оракла), тут что то подумалось , откуда такое счастие
подвалило , а потом вспомнил - как мой друг сиделец рассказывал как устраивают конкурсы Мисс зона...
...
Рейтинг: 0 / 0
DateTime
    #38687571
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

не трожь Псаки!
...
Рейтинг: 0 / 0
DateTime
    #38687594
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиnetivan,
дак и джаву в зародыше задавят ( запчасть от оракла), тут что то подумалось , откуда такое счастие
подвалило , а потом вспомнил - как мой друг сиделец рассказывал как устраивают конкурсы Мисс зона...
оу. Приходи в арею, обсудим там :)
...
Рейтинг: 0 / 0
DateTime
    #38689033
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возвращаемся к вопросу... вот как надо делать правильно:

http://www.php.net/manual/en/datetimeimmutable.modify.php
...
Рейтинг: 0 / 0
DateTime
    #38691105
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Честно говоря я не понял, в чем цимус того, что DateTime станет изменяемой структурой
...
Рейтинг: 0 / 0
68 сообщений из 68, показаны все 3 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / DateTime
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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