2010-09-28 29 views
5

¿Puede alguien ayudarme a encontrar la diferencia básica entre mutable e inmutable?¿Cuál es la diferencia entre mutable e inmutable?

+3

¡Errr, uno puede cambiar, el otro no! Hoy parece ser el día de las preguntas "especiales" ... – leppie

+0

Tipos de inmutabilidad: http://blogs.msdn.com/b/ericlippert/archive/2007/11/13/immutability-in-c-part-one -kinds-of-immutability.aspx – LukeH

+0

Gracias uno y alla –

Respuesta

12

Immutable significa que una vez inicializado, el estado de un objeto no puede cambiar.

Mutable significa que sí.

Por ejemplo, las cadenas en .NET son inmutables. Cada vez que realiza una operación en una cuerda (molduras, carcasa superior, etc.) se crea una nueva cuerda.

En la práctica, si desea crear un tipo inmutable, solo permite getters en él y no permite ningún cambio de estado (por lo que cualquier campo privado no puede cambiar una vez que el constructor terminó de ejecutarse).

+1

'DateTime' es otro. – Andrey

+0

@Andrey: Es un error del programador si un tipo de valor es mutable :) – leppie

2

Un tipo inmutable no se puede cambiar una vez instanciado. Por ejemplo, las cadenas son inmutables. Cada vez que desee cambiar el valor de una cadena, se creará una nueva instancia.

4

Un very basic definition sería:

mutables objetos: Cuando se tiene una referencia a una instancia de un objeto, el contenido de esa instancia pueden ser alterados

inmutables Objetos: Cuando usted tiene una referencia a una instancia de un objeto, el contenido de esa instancia no puede ser alterado

3

Immutable significa "no se puede modificar después de haber sido creado".

  • Un tipo inmutable tiene un constructor y captadores pero no definidores.
  • Un tipo mutable también puede tener configuradores.

Un ejemplo de tipo inmutable es DateTime. El método AddMinutes no modifica el objeto; crea y devuelve un nuevo DateTime.

Otro ejemplo es la cadena. Para una clase mutable similar a la cadena, puede usar la clase StringBuilder.

No hay una palabra clave en C# para declarar un tipo como inmutable. En su lugar, debe marcar todos los campos de miembros como readonly para asegurarse de que solo se puedan establecer en el constructor. Esto evitará que modifique accidentalmente uno de los campos, rompiendo la inmutabilidad.

1

Variables inmutables usando en lenguajes funcionales. El uso de una variable de término es inapropiado y los programadores funcionales prefieren el valor del término.

1

Ventajas de inmutabilidad:

1 hilo de seguridad
2 Compartiendo
3 menos propenso a errores

Así que prefieren la inmutabilidad, si usted tiene la elección.:)

0

Uso de referencia
imaginationhunt.blogspot

IS STRING MUTABLE OR IMMUTABLE IN .NET?

mutable: medios mutables cuyo estado se puede cambiar una vez creado.
Inmutables: medios inmutables cuyo estado no se puede cambiar una vez que se ha creado.

Los objetos de cadena son 'inmutables', lo que significa que no podemos modificar los caracteres contenidos en la cadena, también el funcionamiento en cadena produce una versión modificada en lugar de modificar los caracteres de la cadena.

Cuestiones relacionadas