public object MethodName(ref float y)
{
//method
}
¿Cómo se define un delegado de Func para este método?Delegado de Func con la variable de referencia
public object MethodName(ref float y)
{
//method
}
¿Cómo se define un delegado de Func para este método?Delegado de Func con la variable de referencia
No se puede hacer por Func
pero se puede definir una costumbre delegate
para ello: ejemplo
public delegate object MethodNameDelegate(ref float y);
Uso:
public object MethodWithRefFloat(ref float y)
{
return null;
}
public void MethodCallThroughDelegate()
{
MethodNameDelegate myDelegate = MethodWithRefFloat;
float y = 0;
myDelegate(ref y);
}
En .NET 4+ también se puede apoyar de esta manera ref
tipos ...
public delegate bool MyFuncExtension<in string, MyRefType, out Boolean>(string input, ref MyRefType refType);
No para resucitar un hilo muerto, pero definitivamente debe tenerse en cuenta para cualquiera que se encuentre con esto que, si bien puede admitir un parámetro de referencia con genéricos de esta manera, el parámetro de tipo genérico será invariable. Los parámetros de tipo genérico no admiten la varianza (covarianza o contravarianza) para los parámetros ref o out en C#. Sin embargo, está bien si no necesita preocuparse por conversiones de tipo implícitas. –
Disculpa, esta respuesta está un poco fuera de lugar. El 'in' y el 'out' que muestra para desmarcar al delegado se relacionan con el co-versus "contra-varianza", y no están relacionados con lo que el OP está preguntando. La pregunta era sobre los delegados que pueden aceptar parámetros por referencia, no la agilidad de un delegado (genérico) con respecto a su parametrización de tipo. –
La razón es: todos los argumentos de tipo genérico deben ser elementos que son conv ertible para objetar "ref flotar" no es convertible a objeto, por lo que no puede usarlo como un argumento de tipo genérico. –
Gracias por eso, estaba luchando por usar Func, así que sé por qué no puedo usarlo cuando el tipo no es convertible al objeto – chugh97
. ¿Eso significa que la escritura del delegado requerirá boxeo/unboxing en este caso? –