Puede usar la out
palabra clave contextual en dos contextos (cada uno es un enlace a información detallada), como un modificador de parámetros o en declaraciones de parámetros de tipo genérico en interfaces y delegados. Este tema trata sobre el modificador de parámetros, pero puede ver este otro tema para obtener información sobre las declaraciones de parámetros de tipo genérico.
La out
palabra clave hace que los argumentos se pasen por referencia. Esto es como la ref
palabra clave, excepto que ref
requiere que la variable se inicialice antes de pasarla. Para usar un out
parámetro, tanto la definición del método como el método de llamada deben usar explícitamente la out
palabra clave. Por ejemplo: C #
class OutExample
{
static void Method(out int i)
{
i = 44;
}
static void Main()
{
int value;
Method(out value);
// value is now 44
}
}
Aunque las variables pasaron como out
argumentos no tienen que inicializarse antes de pasarlas, se requiere que el método llamado asigne un valor antes de que el método regrese.
Aunque las palabras clave ref
y out
provocan un comportamiento de tiempo de ejecución diferente, no se consideran parte de la firma del método en tiempo de compilación. Por lo tanto, los métodos no se pueden sobrecargar si la única diferencia es que un método toma un ref
argumento y el otro toma un out
argumento. El siguiente código, por ejemplo, no se compilará: C #
class CS0663_Example
{
// Compiler error CS0663: "Cannot define overloaded
// methods that differ only on ref and out".
public void SampleMethod(out int i) { }
public void SampleMethod(ref int i) { }
}
Sin embargo, se puede realizar una sobrecarga si un método toma un argumento ref
o out
y el otro no usa ninguno de estos, de la siguiente manera: C #
class OutOverloadExample
{
public void SampleMethod(int i) { }
public void SampleMethod(out int i) { i = 5; }
}
Las propiedades no son variables y, por lo tanto, no se pueden pasar como out
parámetros.
Para obtener información sobre cómo pasar matrices, consulte Pasar matrices usando ref
yout
(Guía de programación de C #).
No puede usar las palabras clave ref
y out
para los siguientes tipos de métodos:
Async methods, which you define by using the async modifier.
Iterator methods, which include a yield return or yield break statement.
Ejemplo
Declarar un out
método es útil cuando desea que un método devuelva varios valores. El siguiente ejemplo se usa out
para devolver tres variables con una sola llamada al método. Tenga en cuenta que el tercer argumento se asigna a nulo. Esto permite que los métodos devuelvan valores opcionalmente. C#
class OutReturnExample
{
static void Method(out int i, out string s1, out string s2)
{
i = 44;
s1 = "I've been returned";
s2 = null;
}
static void Main()
{
int value;
string str1, str2;
Method(out value, out str1, out str2);
// value is now 44
// str1 is now "I've been returned"
// str2 is (still) null;
}
}
out
no se puede leer antes de asignarla.ref
no tiene esta restricción Entonces ahí está eso.