Tengo una clase que es principalmente un contenedor para una gran matriz y algunas tareas domésticas asociadas. Tengo una función que toma un parámetro ref. Cuando paso una instancia de la clase a la función, quiero que se envíe la matriz.Pasar un lanzamiento explícito como un parámetro ref (C#)
Considere los moldes explícitos. Digamos que tengo alguna función que tiene un parámetro byte [] ref.
public void SomeFunction(ref byte[] someBytes);
Y que tengo alguna clase con un molde explícito sobrecargado.
class SomeClass
{
byte[] someBytes;
public static explicit operator byte[](SomeClass someInstance)
{
return someInstance.someBytes;
}
}
Ahora quiero llamar a la función con la clase como un parámetro
SomeClass someInstance = new SomeClass();
SomeFunction(ref (byte[]) someInstance);
El compilador se queja de "un ref o argumento a cabo deben ser una variable asignable". No estoy seguro de si estoy fallando en dar masajes al compilador correctamente o si realmente no puedes hacer eso.
me considera un valor de retorno de la propiedad o función, pero no se puede pasar por los ref (y después de educar a mí mismo veo por qué ...)
preferiría no hacer la matriz un campo público , pero eso satisface al compilador. Yo supongo tan sólo pudiera crear una variable local para hacer referencia a la matriz con, pero eso es una línea adicional de código antes y después de cada llamada a la función ...
EDIT: podría valer la pena señalar que fue escrito por algunaFuncion un tercero y no tengo acceso para cambiarlo. Peor aún, no creo que su parámetro realmente deba ser ref ...
Así resulta que la solución práctica sería ser un campo público o un método corto cuyo único propósito es encubrir la creación de una variable local para pasar. Yo algunos medicamentos genéricos más excavación podría ayudar , también. – ajs410
Correcto, un setter simple sería suficiente para actualizar alguna instancia. Como alternativa, puede crear una interfaz que SomeFunction tome como argumento y SomeInstance implemente e implemente su lógica a través de esa interfaz. –