Paso por valor o por referencia
En C# se puede elegir si quieres pasar a un método el valor o la referencia de una variable.
// pasar por valor
int numero = 25;
CambiarPorValor(numero);
Console.Write(numero); // prints 25
// pasar por ref
CambiarPorReferencia(ref numero);
Console.Write(numero); // prints 12
// this is the same as in Java
public static void CambiarPorValor(int numero)
{
numero = 12;
}
// referencia(!)
public static void CambiarPorReferencia(ref int numero)
{
numero = 12;
}
out vs ref
(!) You should use out
unless you explicitly need ref
(!)
The difference is ref
needs the variables to be initialized first, while out
does not. This could confuse readers as it looks the initial values are relevant.
out example (remember it also has to be marked in the method)
string a,b;
person.GetBothNames(out a, out b);
string a = String.empty, b = String.empty;
person.GetBothNames(ref a, ref b);
Devolver 2 valores desde una función
Al poder pasarse referencias, esto es posible.
public static void Devuelve2Valores(ref int numero1, ref int numero2)
{
numero1 = 10;
numero2 = 20;
}
Interpolar Strings
Aparte del +
igual que Java se puede concatenar hacer asi
string cadena1 = "test";
string cadena2 = "test2";
string todasCadenas = string.Concat(cadena1, cadena2);
O también se pueden interpolar:
string cadena1 = "test";
string cadena2 = "test2";
string interpolacion = $"{cadena1} texto aparte {cadena2}";
También se puede usar StringBuilder
pero se usa igual a Java.
Función Local
Se pueden meter funciones dentro de funciones. Las que están dentro, solo se pueden ejecutar y ver desde el contexto de la función padre.
class Program
{
static void Main(string[] args)
{
FuncionPrincipal(12);
}
public static void FuncionPrincipal(int numero)
{
Console.WriteLine("Dentro de la funcion principal");
numero = numero + 10;
FuncionLocal(numero);
void FuncionLocal(int numeroLocal)
{
numeroLocal = numeroLocal * 15;
Console.WriteLine(numeroLocal);
}
}
}