¿Los parámetros de "salida" son algo malo en .NET? ¿Algún buen artículo/discusión sobre este tema?¿Los parámetros de "salida" son algo malo en .NET?
Respuesta
Bueno, tengo an article on what ref/out do - pero no discute si deberías usarlos o no.
Básicamente out
Los parámetros son generalmente un signo de que desea devolver efectivamente dos resultados de un método. Eso es generalmente olor a código, pero hay algunos casos (sobre todo con el patrón TryXXX) en los que realmente desea devolver dos elementos de información por buenas razones y no tiene mucho sentido encapsularlos juntos.
En otras palabras, evite los puntos afuera/ref donde pueda hacerlo fácilmente, pero no se salga de su camino para evitarlos.
Tu última frase es un consejo bueno, sólido y pragmático. –
En la mayoría de los casos, recomendaría no utilizar los parámetros de Salida. Básicamente, agregan efectos secundarios a su código y podrían ser una pesadilla cuando se trata de depuración.
Hay un artículo en MSDN respecto Sale parámetros disponibles aquí: http://msdn.microsoft.com/en-us/library/t3c3bfhx.aspx
creo que son realmente útiles cuando sea necesario.
Un artículo Msdn para los dos parámetros de ref y out.
Buena pregunta. Mi respuesta es que no me gustan particularmente, pero los uso en uno de mis proyectos donde los valores de devolución múltiples son comunes. Tengo una biblioteca de datos financieros que devuelve el precio real (o nulo/cero), un código de error importante y un código de error menor. La biblioteca tiene de docenas a cientos de métodos, y cada código de error es de un tipo diferente, por lo que crear clases personalizadas para cada uno y devolver una instancia de eso sería muy difícil de manejar.
FxCop no creo que sea una buena idea ...
http://msdn.microsoft.com/en-us/library/ms182146(VS.80).aspx
Sale parámetros son útiles cuando se necesita para devolver más de un objeto como resultado de una función. A mis ojos,
void doSomeThing(Thing toDoItTo,
out OtherThing result1,
out AnotherThing result2)
{
...
}
OtherThing y;
AnotherThing z;
doSomeThing(x, out y, out z);
y.method1();
z.method2();
es mucho más limpio que
struct DoSomeThingResults
{
public OtherThing Result1;
public OtherThing Result2;
}
DoSomeThingResults doSomeThing(Thing toDoItTo)
{
...
}
DoSomethingResults results = doSomeThing(x);
results.Result1.method1();
results.Result2.method2();
y, además, el uso de parámetros out significa que los resultados están garantizados para ser asignado.
En ausencia de tuplas, a veces son la forma más limpia de hacer las cosas. En general los odio, sin embargo.
F # tiene un buen azúcar sintáctico para tratar con ellos. En lugar de hacerme lidiar con los parámetros out
, los trata como métodos que devuelven tuplas. Los diversos métodos TryParse
terminan regresando dos tuplas de elementos:
let success, value = Int32.TryParse("1234")
(* success is true *)
(* value is 1234 *)
Es bastante práctico, y no me hace sentir sucia.
¡Me gusta este azúcar también! – BuddyJoe
Para este caso particular, puede usar Nullable
no es del todo malo para utilizar la salida
vamos a tratar debe precisar los beneficios:
using ref force us to initialize it so we are letting the ref variable to place in heap and consume some spaces .
in most cases we return null if the operation has some none logic conditions
but with Out we avoid consuming the heap and refspace
- 1. CSS - ¿Los márgenes son algo malo?
- 2. ¿Qué pasa con los parámetros de salida?
- 3. debug = true en web.config = ¿Algo MALO?
- 4. Algo bueno y algo malo sobre SharePoint
- 5. son los parámetros de validación realmente útiles?
- 6. ¿Qué son los metadatos en .NET?
- 7. Parámetros de salida opcionales
- 8. SHA1 en Haskell - algo malo en mi implementación
- 9. ¿Hay algo de malo en tomar medidas inmediatas en los constructores?
- 10. C# - Azúcar sintáctico para los parámetros de salida?
- 11. Obtener los parámetros url de una cadena en .NET
- 12. ¿Cuáles son los requisitos para los parámetros de plantilla C++?
- 13. Índices de base de datos: ¿Algo bueno, algo malo o una pérdida de tiempo?
- 14. Mezcla y parámetros nombrados en C#: ¿Por qué los parámetros de salida también necesitan ser nombrados?
- 15. ¿Hay algo malo en declarar la clase anidada dentro de la interfaz en java?
- 16. ¿Hay algo de malo en devolver los valores construidos por defecto?
- 17. Parámetros de salida con RhinoMocks
- 18. ¿Cuáles son estos tres puntos en los tipos de parámetros
- 19. ¿Qué son los parámetros de evento y UI en Dialog
- 20. ¿Los parámetros implícitos son una dificultad para incluir en GHC?
- 21. Uso de NHibernate con los parámetros de salida
- 22. ¿Por qué necesitamos parámetros de "salida"?
- 23. Asp.Net Mvc Los parámetros de entrada JQuery ajax son nulos
- 24. ¿Está utilizando muchos métodos estáticos como algo malo?
- 25. Marcar los parámetros como NOT anulables en C# /. NET?
- 26. DynamicMethod y parámetros de salida?
- 27. Casting C# parámetros de salida?
- 28. incrustación mono con C# "parámetros de salida"
- 29. ¿Cuáles son los números entre corchetes en la salida NSLog()?
- 30. ¿Los parámetros predeterminados son una mala práctica en OOP?
Esta pregunta tiene una buena discusión: http://stackoverflow.com/questions/214688/why -does-the-net-framework-guidelines-recommend-that-you-dont-use-refout-argume – Brian