Pregunta

Hola gente que necesitan a lo profundo del clon de algunos objetos personalizados que se hace referencia a otros objetos personalizados y éstos pueden hacer referencia a otra cust ... y así sucesivamente usted consigue la idea.

Yo soy sólo en la fase de documentación y la concepción en el momento así Wan't a hacer las cosas bien.

Q1. ¿Por qué implementar ICloneable y devolver un objeto cuando se podría escribir una función personalizada inflexible que devuelve el tipo de objeto correcto clonados?

Q2. Los objetos no son enormes y no me importa hacer el levantamiento inicial pesada copia de cada elemento, pero siendo yo perezoso podría MemberwiseClone el objeto y luego agregar el código específico para los miembros que se hace referencia de nuevo esto crearía una necesidad para la fundición, así que lo que es más effiecient en términos de ciclos de CPU?

Cualquier ideas, opiniones y reflexiones bienvenida.

¿Fue útil?

Solución

536349 razones para no implementar ICloneable; Básicamente se podría definir su propia interfaz (inflexible) y el uso que, no veo ningún problema con ella, siempre y cuando correctamente los documentos que crea copias de profundidad.

Otros consejos

El propósito de una interfaz es permitir que las personas operan sobre los objetos que admiten la interfaz sin tener que preocuparse por lo que los objetos son en realidad. Sin saber lo iCloneable.Clone es en realidad va a hacer en cualquier objeto dado, simplemente sabiendo que un objeto es compatible con ICloneable es bastante inútil.

Hubiera sido útil para tipos de colección que tienen un método BaseClone protegida, y para que puedan tener un tipo derivado que haría pública (hacer las cosas de esa manera permitiría que uno de los tipos Cloneable y no Cloneable derivan de las colecciones ). Tener algo así como un diccionario admite método Clone sería mejor que incluye un constructor de copia, ya que el argumento a un constructor de copia podría ser un tipo que deriva de diccionario, pero fue significativamente diferente internamente.

Para una interfaz de clonación para ser útil, tendría que incluir una propiedad por la que elementos podrían decir cómo se sentían acerca de la clonación (por ejemplo, el tipo -1- es inmutable y no necesita la clonación; -2- clonación de un tipo de probablemente romperlo; -3- los soportes tipo de clonación), y especificar que una operación DeepClone comprobaría todos los objetos para asegurarse de que no le importaba que la clonación, y si ese fuera el caso, sería clonar todos los objetos mutables anidados. Por desgracia, nada de eso existe en el marco.

Tener una interfaz para indicar que un objeto es cloneable puede ser útil si un conjunto de tipos derivados incluye versiones Cloneable y no Cloneable. Si es posible que los derivados de un tipo pueden no ser capaces de soportar la clonación, los métodos de clonación de ese tipo debe ser protegido; una versión cloneable del tipo debe derivarse de ella, pero otros tipos debería derivarse de las versiones no Cloneable.

Por ejemplo, uno podía tener un tipo Widget con tipos derivados incluyendo CloneableWidget y SuperWidget (que no es cloneable). SuperWidget podría tener un CloneableSuperWidget tipo derivado (junto con algunos otros que se rompería si clonado). Si se quiere ser capaz de trabajar con todos los derivados Cloneable un tipo de interfaz, uno tendría que comprobar tanto que los objetos se deriva de Widget, y que se cloneable. Adición de ICloneable a los derivados Cloneable permitiría uno para comprobar si un objeto tal.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top