2015-01-29 4 views
-1

Я пытаюсь понять неизменные типы. Я знаю, что строка неизменна, а также анонимный тип, delagates, но как насчет этих? Какие из них неизменны в C# и почему? Не могли бы вы объяснить это?
набор данных, Этикетка, DateTime, объект, ArrayListНеизменяемые типы в C#

+0

'DataTime' неизменны, 'object' имеет неизменный интерфейс, хотя реальный тип может быть изменчивым. Остальные изменчивы. – Lee

+0

'ArrayList' является изменяемым (вы можете изменить элемент в' ArrayList': 'a [1] = a [0]') –

+2

отличный способ дать возможность выполнять ваши задания другими: P – Neel

ответ

2

DateTime является struct (= тип значения) и неизменны, а остальное (DataSet, Label, object, ArrayList) изменчивы:

Объект типа DateTime не могут быть изменены - все методы на нем возвращают новый объект DateTime. Все остальные могут быть изменены.
object немного особенный, так как это может быть «что угодно», и поэтому AFAIK он не называется неизменяемым.

В целом «неизменный» означает, что объект не может быть изменен после его создания. Как правильно указано Тимом struct, s по умолчанию изменяются, но часто реализуются неизменно. Таким образом, значение типа может быть изменчивым, но в большинстве случаев это не так. См. Пример THIS, что случается, когда вы используете изменяемый тип значения.

+0

'object' не обязательно изменяемы: 'object o = new object() 'неизменен, и вы не можете мутировать через тип переменной' object'. – Lee

+2

Стоит упомянуть, что такие типы значений, как 'structs' _can_, являются изменяемыми, хотя в основном это не так. Если тип изменен, зависит от реализации. –

+1

@ChrFin: как вы уже сказали, объекты могут быть любыми. Но если вы создадите «пустой» объект, как это сделал Ли, он является неизменным, потому что нет свойств или полей для изменения. Как вы хотите изменить что-то, что нечего менять ?! –

Смежные вопросы