Entiendo que "salir" son como los tipos "ref", excepto que las variables de salida no tienen que inicializarse. ¿Hay algún otro uso de los parámetros de "salida"? A veces veo su uso en los métodos de devolución de llamada, pero nunca entendí cómo funcionan en realidad o por qué los necesitamos en lugar de variables de ref de nivel global.¿Por qué necesitamos parámetros de "salida"?
Respuesta
out
parámetros imponen el contrato entre el que llama y el llamado (la función que se llama) al especificar explícitamente que el destinatario los inicializará. Por otro lado, al usar los parámetros ref
, todo lo que sabemos es que el destinatario podría modificarlos, pero es responsabilidad del que llama inicializarlos.
Uno de los mayores ejemplos es los métodos TryParse, que quieren ser capaces de comprobar si algo se puede convertir, y por lo general si se puede convertir desea que el valor convertido. De lo contrario, es solo otra forma de pasar objetos al método de llamada.
por qué le gustaría tener algo para inicializar en el método de llamada, sin garantía de que el método llamado en sí podría sobrescribir la variable si el método se completa con normalidad? Esos son los beneficios que le brindan los parámetros out
.
Básicamente pienso en out
parámetros como "vaya, tengo que devolver más de un valor" indicadores. Preferiría usar tuplas, pero por supuesto solo lo hicieron en .NET 4 ... y sin un soporte de lenguaje explícito son un poco más difíciles de usar de lo que sería ideal también.
2 diferencias principales son que hay
- A diferencia de ref que no espera que la variable a ser inicializado.
- cuando se usa OUT, la función llamada es responsable de asignar el valor no llamado.
- 1. ¿Por qué necesitamos fibras
- 2. ¿Por qué necesitamos Thread.MemoryBarrier()?
- 3. ¿Por qué necesitamos web-sockets?
- 4. ¿Por qué necesitamos marcos burlones?
- 5. ¿Por qué necesitamos mesa virtual?
- 6. ¿Por qué necesitamos C Unions?
- 7. ¿Por qué necesitamos ng-click?
- 8. ¿Por qué necesitamos usar Radix?
- 9. ¿Por qué necesitamos struct? (C#)
- 10. ¿Por qué necesitamos delegados de C#
- 11. ¿Por qué necesitamos patrones de diseño?
- 12. ¿por qué necesitamos zone_highmem en x86?
- 13. ¿Por qué todavía necesitamos código generado?
- 14. ¿Por qué necesitamos el método ContinueWith?
- 15. ¿Por qué necesitamos Application Server en Java?
- 16. ¿Por qué necesitamos servicios web RESTful?
- 17. ¿Por qué incluso necesitamos el operador "delete []"?
- 18. ¿Por qué necesitamos funcall en Lisp?
- 19. ¿Por qué necesitamos interfaces en Java?
- 20. ¿Por qué necesitamos una etiqueta fieldset?
- 21. ¿Por qué necesitamos un constructor privado?
- 22. ¿por qué necesitamos ClassMethods e InstanceMethods?
- 23. ¿Por qué necesitamos Propiedades en C#
- 24. ¿Qué pasa con los parámetros de salida?
- 25. ¿Por qué necesitamos este operador especial ===?
- 26. Mezcla y parámetros nombrados en C#: ¿Por qué los parámetros de salida también necesitan ser nombrados?
- 27. Marshalling: ¿qué es y por qué lo necesitamos?
- 28. PHP: ¿Qué son construcciones idiomáticas y por qué las necesitamos?
- 29. ¿Qué es __i686.get_pc_thunk.bx? ¿Por qué necesitamos esta llamada?
- 30. Parámetros de salida opcionales